【问题标题】:Laravel resource controller's methods behaving strangeLaravel 资源控制器的方法表现奇怪
【发布时间】:2018-12-21 05:53:54
【问题描述】:

我是 laravel 的初学者。当我在处理它的资源控制器的方法时,我发现路由名称和参数传入方法有奇怪的关系。请让我解释一下:

示例 1: 在 web.php 中:

Route::resource('users','UsersController');

在 Userscontroller.php 中:

public function show(Users $user)
{
   var_dump($user->name); exit; //returning name
}

示例 2: 在 web.php 中:

Route::resource('users','UsersController');

在 Userscontroller.php 中:

public function show(Users $users)
{
   var_dump($users->name); exit;  //null i.e. plain object returned 
} 

示例 3: 在 web.php 中:

Route::resource('usrss','UsersController'); 

在 Userscontroller.php 中:

public function show(Users $usrss)
{
   var_dump($usrss->name); exit;     //returning name
}

示例 4: 在 web.php 中:

Route::resource('usrss','UsersController'); 

在 Userscontroller.php 中:

public function show(Users $usrs)
{
   var_dump($usrs->name); exit;     //returning null
}

注意:它也适用于其他方法:如编辑、销毁等

所以我很困惑和好奇,laravel 期望我们设置传递给资源控制器方法的对象名称。我想启动我们可以给任何名字的对象,但我猜 laravel 对此有一些限制。我也用谷歌搜索过,但没有得到满意的答案。请帮我清除这个。 PS:由于格式错误警告,stackoverflow 不接受我的代码,但我的格式正确,所以我按原样发布。

我不明白 stackoverflow 是为了帮助我们解决疑虑,而且人们很容易投反对票。由于这种行为,新用户帐户可能会被阻止。请支持他们。

【问题讨论】:

  • 我认为你不能在 show() 中传递 User 对象,只需在 show() 中传递 $id
  • 我不明白 stackoverflow 是为了帮助我们解决疑虑,而且人们很容易投反对票。由于这种行为,新用户帐户可能会被阻止。请支持他们。

标签: php laravel


【解决方案1】:

运行php artisan route:list 以查看Route::resource() 生成的路由列表。您将看到您作为第一个参数传递的名称是在生成的路由中用作参数名称的名称。当控制器函数有一个同名的参数时,也就是使用 Eloquent 模型进行类型提示时,Laravel 会尝试将正确的模型绑定到路由。

如果您不使用相同的名称,Laravel 只会注入模型的一个新实例(未预先填充现有数据)。这是您返回的普通模型,而不是现有记录的实例。

不过,顺便说一句,您可能还想考虑将 Users 模型重命名为单数而不是复数,因为这通常被认为是最佳做法。

【讨论】:

  • 现在清除了.. 谢谢
猜你喜欢
  • 2014-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 2013-05-15
  • 2016-07-05
  • 1970-01-01
相关资源
最近更新 更多