Laravel 5.4: пользовательское представление для привязки модели маршрута, не находящей идентификатор

Поскольку я начинаю с 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);
}

Как это действительно сделано?

0

Решение

Прежде всего, то, что делает Laravel, если в БД нет модели Row с заданным идентификатором, он автоматически отправляет 404 ответ.

Если соответствующий экземпляр модели не найден в базе данных, автоматически генерируется HTTP-ответ 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');
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]