【问题标题】:Laravel route model binding for just one routeLaravel 路由模型绑定仅用于一条路由
【发布时间】:2015-08-28 05:01:39
【问题描述】:

我有一个带有 8 种方法的控制器。其中有七个使用了这种说法:

$item = Item::findOrFail($id);

但是,只有一个需要不同的查询:

$item = Item::with('subitem')->findOrFail($id);

我想为这些方法中的前七个定义一个路由模型绑定,但是,有没有办法以某种方式告诉 Laravel,对于最后一个方法,我希望注入 ID 而不是 Item 类的实例?目前我正在做以下事情,但它很糟糕:

$item = Item::with('subitem')->findOrFail($item->id);

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    是的,您只需更改用于模型绑定的路由中的参数名称即可轻松完成,例如,为什么不在您需要模型的路由中使用$item(或类似的东西)绑定,以便您可以将模型绑定到包含$item 参数的路由,例如:

    Route::post('items/{item}', 'ItemController@update');
    

    将模型绑定到路由时,使用如下内容:

    public function boot(Router $router)
    {
        parent::boot($router);
    
        $router->model('item', 'App\Item');
    }
    

    所以,只有当item参数被发现作为路由参数时,Item模型才会被绑定,但是对于需要ID的路由,使用像这样的路由声明(使用id作为参数) :

    Route::post('items/{id}', 'ItemController@whatever');
    

    ItemController@whatever 方法中,您将从路由中获取 id:

    public function whatever($id)
    {
        // $id would be an integer value for $id not a model
    }
    

    【讨论】:

    • 感谢您的回答。虽然这并不像我预期的那么优雅。看来我不会再使用路由模型绑定了,太基础了..
    猜你喜欢
    • 2017-10-07
    • 2021-05-24
    • 2016-06-04
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 2018-12-17
    • 2015-07-12
    相关资源
    最近更新 更多