我是Laravel的新手。我刚从https://github.com/rappasoft/laravel-5-boilerplate分叉 laravel 5样板。
在路线文件中,我看到有这样的一行:
Route::group(['prefix' => 'user/{deletedUser}'], function () {
Route::get('delete', 'UserStatusController@delete')->name('user.delete-permanently');
Route::get('restore', 'UserStatusController@restore')->name('user.restore');
});
我理解这意味着,当网址捕获'恢复'时,它将使用 UserStatusController 中的恢复功能。
这就是:
public function restore(User $deletedUser, ManageUserRequest $request)
任何人都可以帮我发现,如何将对象 $ deletedUser 发送到恢复功能。谢谢你!
答案 0 :(得分:3)
如果你看一下路线定义:
user/{deletedUser}
{deletedUser}
代表要删除/恢复的用户的id
。变量在路由中的{}
之间声明为docs个状态。
现在在您的控制器中:
public function restore(User $deletedUser, ManageUserRequest $request)
您可以看到User
对象被声明为参数。 Laravel正在注入此对象,该对象将自动查找具有id
的User对象。这称为Route Model Binding。
documentation更好地解释了它:
将模型ID注入路径或控制器操作时,通常会查询以检索与该ID对应的模型。 Laravel路径模型绑定提供了一种将模型实例直接自动注入路径的便捷方法。例如,您可以注入与给定ID匹配的整个User模型实例,而不是注入用户的ID。
同样,在这种情况下注入的Request
类是ManageUserRequest
,它应该是FormRequest的一个实例。
因此,回到您的问题,您只需指定要删除/恢复的用户ID,如下所示:
someurl.dev/users/5 // <-- for the user of id=5
现在您的控制器将与该特定对象进行交互以执行您想要的操作:
public function restore(User $deletedUser, ManageUserRequest $request)
{
$deletedUser->delete(); // for example
}
答案 1 :(得分:1)
首先,在['prefix' => 'user/{deletedUser}']
中,您可以看到您正在从网址解析参数。这样,当有人导航到api/user/3
时,laravel会将3
传递给您的路由处理程序。
其次,获取User
模型实例而不仅仅获取id
数字会非常好。这是可能的,它被称为&#34;模型绑定&#34;。模型绑定可以是
显
您在boot
类中将绑定添加到RouteServiceProvider
方法,告诉laravel参数的预期类型是什么。
public function boot()
{
parent::boot();
Route::model('deletedUser', App\User::class);
// in older docs I've seen 'App\User' passed as a string instead of as a class
}
隐
Laravel会根据类型提示自动确定您需要的型号。
public function restore(User $deletedUser, ManageUserRequest $request) {}
此处,$deletedUser
的类型暗示为User
。 Laravel看到了这一点,因此它将继续为您转换id
到Eloquent
模型。
您似乎正在使用隐式绑定,但请随时查看您的RouteServiceProvider
课程。
查看文档链接以获取更多详细信息,它编写得非常好。 (如果您未使用5.6版,则只需更改链接中的版本号。)
答案 2 :(得分:1)
您只需将用户的ID
作为参数传递。
这个功能
public function restore(User $deletedUser, ManageUserRequest $request)
您可以看到$deletedUser
类型为User
,Laravel将在id
表中搜索$deletedUser
(Users
}并返回该用户的对象
如果您不想要用户对象,只需要将ID
功能传递给
restore()
public function restore($deletedUser, ManageUserRequest $request)