Laravel样板将对象发送到控制器

问题描述 投票:0回答:3

我是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恢复功能。谢谢你!

php laravel
3个回答
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
投票

这里发生了两件事:参数(docs)和模型绑定(docs

首先,在['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 }
  • 含蓄 Laravel根据类型提示自动确定您需要的模型。 public function restore(User $deletedUser, ManageUserRequest $request) {} 在这里,$deletedUser的类型暗示为User。 Laravel看到了这一点,所以它会继续将id转换为Eloquent模型。

您似乎使用隐式绑定,但请随意检查您的RouteServiceProvider类。

查看文档链接以获取更多详细信息,它写得非常好。 (如果您未使用5.6版,则只需更改链接中的版本号)。


1
投票

您只需要将用户的ID作为参数传递。

而这个功能

public function restore(User $deletedUser, ManageUserRequest $request)

你可以看到$deletedUserUser类型Laravel将在id表中搜索$deletedUserUsers)并返回该用户的对象。

如果您不想要User对象并且只需要ID,那么您将URL更新restore()函数传递给

 public function restore($deletedUser, ManageUserRequest $request)
© www.soinside.com 2019 - 2024. All rights reserved.