Laravel 5.5模型绑定API不起作用

时间:2019-07-09 09:59:50

标签: php laravel

我在Laravel 5.5中的模型绑定有问题。

我的api.php中有

Route::group(['prefix'=>'tasks'], function() {
    Route::get('delete/{task}', 'TaskController@delete');

});

在我的控制器中:

public function delete(Request $request, Task $task){
        var_dump($task->id);

    }

在我的RouteServiceProvider中:

public function boot()
{
    parent::boot();

    Route::model('task', 'App\Models\Task');
}

在我的App \ Http \ Kernel中

'api' => [
                'throttle:60,1',
                'bindings',
            ],
    protected $routeMiddleware = [
            'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
            'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
            'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,

        ];

但是模型绑定不起作用,我的var dump返回null

如果我尝试在控制器中删除模型绑定并使用:

public function delete(Request $request, $id){
            var_dump(Task::find($id)->id);

        }

有效。 可能是什么问题?

3 个答案:

答案 0 :(得分:1)

首先检查:mapApiRoutes中的routeServiceProvider.php方法,如果没有->middleware('api'),请添加到您的方法中。

您应在API路由中添加api中间件或api前缀。

参考:laravel source code

答案 1 :(得分:0)

您没有提到有关在任务模型中使用keyName方法的任何事情。

如果您没有,那可能就是问题所在。

将此添加到任务模型以覆盖默认方法:

public function getRouteKeyName()
{
    return 'id';
}

编辑:我刚刚测试过,默认为ID。抱歉,我不好。

答案 2 :(得分:0)

您可以尝试将绑定(或api)中间件添加到您的路由中:

Route::group(['prefix'=>'tasks'], function() {
    Route::get('delete/{task}', 'TaskController@delete');
})->middleware('bindings');