我有以下三个路由规则:
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,其他两种方法也可以工作...有人可以解释一下为什么吗?我应该怎么做才能具有与第一种方法删除相同的行为? 预先感谢。
答案 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);
});
}