Laravel(5.6)中的隐式绑定反击一个空对象

时间:2018-08-21 03:21:48

标签: laravel laravel-5.6 laravel-blade laravel-resource

我正在尝试在控制器中使用方法“ show”,但是当它返回空对象时。

由于此视图:

@foreach ($usuarios as $usuario2)
  <h2>{{$usuario2->nombre}}</h2>
  <a href="prurequests/{{$usuario2->id}}">ver mas2...</a>
@endforeach

通过这条路线:

Route::resource('/prurequests','PruebasControllers\PrurequestsController'); 

使用此控制器的方法:

public function show(Usuario2 $usuario2)  // Ruta con implicing biding
 {
     return $usuario2;
 }

这是模型:

class Usuario2 extends Model
{
    Protected $fillable = ['nombre'];
}

我尝试过此方法,并且有效

查看:

@foreach ($usuarios as $usuario2)
  <h2>{{$usuario2->nombre}}</h2>
  <a href="impli/{{$usuario2->id}}">ver mas...</a>
  <a href="prurequests/{{$usuario2->id}}">ver mas2...</a>
@endforeach

路线

Route::get('impli/{usuario2}', function 
(fractalwebpage\PruebasModelos\Usuario2 $usuario2) {
  return $usuario2;
});

这给我带来了很多数据,我不得不把模型的本质放在路线上。 需要这样做,但要通过控制器。

2 个答案:

答案 0 :(得分:0)

当您尝试在资源控制器中隐式绑定时,那么在创建资源控制器时,您必须添加一个responseMessage选项

--model
  

指定资源模型(如果使用路由模型绑定和   希望资源控制器的方法可以提示模型   例如,您可以在生成   控制器:

查看详细信息https://laravel.com/docs/5.6/controllers#resource-controllers

答案 1 :(得分:0)

默认情况下,Laravel使用url的最后一段作为资源路由请求的占位符,因此,在控制器方法中,您可以注入模型,但使用不同的名称public function show(Usuario2 $prurequests)

但是更确定的解决方案是只更改路由定义中的参数

Route::resource('/prurequests','PruebasControllers\PrurequestsController', ['parameters' => ['prurequests' => 'usuario2']]); 

通过这种方式,您可以继续使用其当前状态的控制器

public function show(Usuario2 $usuario2)  // Ruta con implicing biding
{
   return $usuario2;
}