我是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');
});
我理解这意味着,当url catch'restore'时,它将使用UserStatusController中的函数恢复。
这是:
public function restore(User $deletedUser, ManageUserRequest $request)
任何人都可以帮我找出它,怎样才能发送对象$ deleted user恢复功能。谢谢你!
如果你看一下路线定义:
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
}
首先,在['prefix' => 'user/{deletedUser}']
中,您可以看到您正在从URL中解析参数。这样,当有人导航到api/user/3
时,laravel会将3
传递给你的路线处理程序。
其次,获得User
模型实例而不仅仅是获得id
数字将是非常好的。这是可能的,它被称为“模型绑定”。模型绑定可以
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
}
public function restore(User $deletedUser, ManageUserRequest $request) {}
在这里,$deletedUser
的类型暗示为User
。 Laravel看到了这一点,所以它会继续将id
转换为Eloquent
模型。您似乎使用隐式绑定,但请随意检查您的RouteServiceProvider
类。
查看文档链接以获取更多详细信息,它写得非常好。 (如果您未使用5.6版,则只需更改链接中的版本号)。
您只需要将用户的ID
作为参数传递。
而这个功能
public function restore(User $deletedUser, ManageUserRequest $request)
你可以看到$deletedUser
是User
类型Laravel将在id
表中搜索$deletedUser
(Users
)并返回该用户的对象。
如果您不想要User对象并且只需要ID
,那么您将URL更新restore()
函数传递给
public function restore($deletedUser, ManageUserRequest $request)