美文网首页
tp5 开启路由完整匹配模式

tp5 开启路由完整匹配模式

作者: 风声233 | 来源:发表于2018-08-31 17:43 被阅读468次

    我们现在有一个需求,前端既需要返回多个专题模块,又需要提供相应的 id 时能获得特定的专题模块。
    我们先看一下我们的数据表:


    专题表
    产品表
    关联表

    我们新建两个模块和一个控制器:Theme 模块和 Product 模块以及 Theme 控制器。
    我们先编写一下 Theme 模块:

    protected $hidden = ['delete_time','update_time','topic_img_id','head_img_id'];
    
    public function topicImg(){
      return $this->belongsTo('Image','topic_img_id','id');
    }
    
    public function headImg(){
      return $this->belongsTo('Image','head_img_id','id');
    }
    
    public function products(){
      return $this->belongsToMany('Product','theme_product','product_id','theme_id');
    }
    

    因为 theme 表含有外键 topic_img_id 和 head_img_id,一对一关系关联 image 表的主键 id,所以用 belongsTo 方法。(而不用 hasOne)
    而主题表和产品表是属于多对多的关系,一个主题下面有多个产品,而一个产品可以属于多个主题。(例如某些新上架的水果,既可以属于水果主题,也可以属于新鲜好物主题)所以这里用 belongsToMany 方法,belongsToMany('关联模型名','中间表名','关联的表的外键名','当前模型关联键名');

    现在我们看一下编写控制器:

    class Theme
    {
        public function getSimpleList($ids='')
        {
            ...
            return $result;
        }
    
        public function getComplexOne($id){
            ...
            return $result;
        }
    
    }
    

    我们接下连写一下路由:

    Route::get('api/:version/theme','api/:version.Theme/getSimpleList');
    
    Route::get('api/:version/theme/:id','api/:version.Theme/getComplexOne');
    

    这是后回发现运行时不管参数是由逗号拼接而成的 ids 还是 id 都会运行第一个 getSimpleList,这是因为没有开启全匹配模式。
    在 config.php 中找到更改为 true 即可。

    'route_complete_match'   => true,
    

    之后就可以正常的路由匹配了

    相关文章

      网友评论

          本文标题:tp5 开启路由完整匹配模式

          本文链接:https://www.haomeiwen.com/subject/ijkewftx.html