Поскольку я начинаю с Laravel, это должно быть просто:
Как определить пользовательское представление, которое будет отображаться, когда моя привязка модели маршрута просто не может найти данный идентификатор?
Вот мой маршрут:
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');
}
Вот моя «попытка» использовать обработчик ошибок:
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);
}
Как это действительно сделано?
Прежде всего, то, что делает Laravel, если в БД нет модели Row с заданным идентификатором, он автоматически отправляет 404 ответ.
Поэтому, если вы хотите показать свой собственный вид, вам нужно настроить обработку ошибок.
Так в RouteServiceProvider
файл, убедитесь, что он генерирует пользовательское исключение, используя третий параметр, например:
public function boot()
{
parent::boot();
Route::model('empresa', App\Empresa::class, function () {
throw new NotFoundEmpresaModelException;
});
}
И затем сделайте то же самое в функции рендеринга, как вы пытались раньше.
Я бы предпочел, чтобы вы не использовали возможность инжекции модели, а обрабатывали запрос самостоятельно.
Поэтому возьмите значение идентификатора empresa как есть, а затем попробуйте найти правильные данные, а если не найдено, то создайте свою собственную логику. Это должно быть довольно легко.
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');
}
Других решений пока нет …