为什么方法注入对某些控制器方法不起作用?

时间:2019-07-31 14:59:16

标签: php laravel controller

我有以下三个路由规则:

Route::get('/user-delete/{user}', 'UserActionsController@delete')->name('user.delete');
Route::get('/user-recover/{user}', 'UserActionsController@recover')->name('user.recover');
Route::get('/user-permanentdelete/{user}', 'UserActionsController@permanentDelete')->name('user.permanentDelete');

这是我的控制器:

<?php

namespace App\Http\Controllers;

class UserActionsController extends Controller
{
    public function delete(\App\User $user)
    {
//...
    }

    public function recover(\App\User $user)
    {
//...
    }

    public function permanentDelete(\App\User $user)
    {
//...
    }
}

如果我转到/ user-delete / 1 URL,它可以工作。但是,如果我转到/ user-recover / 1 URL或/ user-permanentDelete / 1 URL,则会收到404错误。 不知何故,依赖项注入不适用于最后两种方法(recover和permanentDelete),但它对于delete方法非常有效。如果我使用Request $ request代替\ App \ User $ user,其他两种方法也可以工作...有人可以解释一下为什么吗?我应该怎么做才能具有与第一种方法删除相同的行为? 预先感谢。

1 个答案:

答案 0 :(得分:0)

由于已删除模型,将找不到该模型。

如果要指定选择模型的方式,并且还包括软删除的模型,则可以customize the resolution logic在RouteServiceProvider的启动方法中,如下所示:

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

    Route::bind('user', function ($value) {
        return App\User::withThrashed()->find($value) ?? abort(404);
    });
}