Laravel 5.4: 路由模型绑定的自定义视图未找到 ID
Laravel 5.4: Custom view for route-model-binding not finding the ID
正如我从 Laravel 开始的那样,这应该是一个简单的:
当我的路由模型绑定找不到给定的 ID 时,如何定义要呈现的自定义视图?
这是我的路线:
Route::get('/empresa/edit/{empresa}', 'EmpresaController@edit');
这是我的控制器的方法:
public function edit(Empresa $empresa)
{
if ((!isset($empresa)) || ($empresa == null)):
//I get that this won't work...
return 'Empresa não encontrada';
endif;
return view('Empresa.dadosEmpresa')->with('empresa', $empresa)->with('action', URL::route('empresa_update', ['id', $empresa->id]))->with('method', 'PATCH');
}
这是我的 "attempt" 使用错误处理程序:
public function render($request, Exception $exception)
{
if ($e instanceof ModelNotFoundException)
{
//this is just giving me a completely blank response page
return 'Empresa não encontrada';
}
return parent::render($request, $exception);
}
这是怎么做到的?
1。正式的方式(但真的需要这样定制吗?)
首先,Laravel 所做的是,如果数据库中没有具有给定 ID 的模型行,它会自动发送 404 响应。
因此,如果您想显示自定义视图,则需要自定义错误处理。
所以在 RouteServiceProvider
文件中,确保它使用第三个参数抛出自定义异常,如下所示:
public function boot()
{
parent::boot();
Route::model('empresa', App\Empresa::class, function () {
throw new NotFoundEmpresaModelException;
});
}
然后在渲染函数中执行与之前尝试相同的操作。
2。休闲方式 - 非常容易上手
我建议大家不要使用模型注入能力,自己处理请求。
所以就拿empresa id值原样,然后尝试找到正确的数据,如果没有找到,再做你的自定义逻辑。那应该很容易去。
public function edit(Request $request, $empresa)
{
$empresaObj = Empresa::find($empresa);
if (!$empresa) {
return 'Empresa não encontrada';
}
return view('Empresa.dadosEmpresa')->with('empresa', $empresa)->with('action', URL::route('empresa_update', ['id', $empresa->id]))->with('method', 'PATCH');
}
正如我从 Laravel 开始的那样,这应该是一个简单的: 当我的路由模型绑定找不到给定的 ID 时,如何定义要呈现的自定义视图?
这是我的路线:
Route::get('/empresa/edit/{empresa}', 'EmpresaController@edit');
这是我的控制器的方法:
public function edit(Empresa $empresa)
{
if ((!isset($empresa)) || ($empresa == null)):
//I get that this won't work...
return 'Empresa não encontrada';
endif;
return view('Empresa.dadosEmpresa')->with('empresa', $empresa)->with('action', URL::route('empresa_update', ['id', $empresa->id]))->with('method', 'PATCH');
}
这是我的 "attempt" 使用错误处理程序:
public function render($request, Exception $exception)
{
if ($e instanceof ModelNotFoundException)
{
//this is just giving me a completely blank response page
return 'Empresa não encontrada';
}
return parent::render($request, $exception);
}
这是怎么做到的?
1。正式的方式(但真的需要这样定制吗?)
首先,Laravel 所做的是,如果数据库中没有具有给定 ID 的模型行,它会自动发送 404 响应。
因此,如果您想显示自定义视图,则需要自定义错误处理。
所以在 RouteServiceProvider
文件中,确保它使用第三个参数抛出自定义异常,如下所示:
public function boot()
{
parent::boot();
Route::model('empresa', App\Empresa::class, function () {
throw new NotFoundEmpresaModelException;
});
}
然后在渲染函数中执行与之前尝试相同的操作。
2。休闲方式 - 非常容易上手
我建议大家不要使用模型注入能力,自己处理请求。 所以就拿empresa id值原样,然后尝试找到正确的数据,如果没有找到,再做你的自定义逻辑。那应该很容易去。
public function edit(Request $request, $empresa)
{
$empresaObj = Empresa::find($empresa);
if (!$empresa) {
return 'Empresa não encontrada';
}
return view('Empresa.dadosEmpresa')->with('empresa', $empresa)->with('action', URL::route('empresa_update', ['id', $empresa->id]))->with('method', 'PATCH');
}