когда страница не найдена, она выдаст NotFoundHttpException
,
есть прервать метод vendor/laravel/framework/src/Illuminate/Foundation
public function abort($code, $message = '', array $headers = [])
{
if ($code == 404) {
throw new NotFoundHttpException($message);
}
throw new HttpException($code, $message, null, $headers);
}
laravel предоставляет различные представления для кодов ошибок: внутри Exceptions/views
есть представления, доступные для
401,403,404,419,429,500,503
, теперь внутри Illuminate\Foundation\Exceptions
есть обработчик внутри Handler.php
: renderHttpException метод используется дляотображать представления в соответствии с кодом состояния Exception.
например:
1) renderHttpException: этот метод проверяет, существуют ли представления для данного кода состояния, а затем возвращать представление.
/**
* Render the given HttpException.
*
* @param \Symfony\Component\HttpKernel\Exception\HttpException $e
* @return \Symfony\Component\HttpFoundation\Response
*/
protected function renderHttpException(HttpException $e)
{
$this->registerErrorViewPaths();
if (view()->exists($view = "errors::{$e->getStatusCode()}")) {
return response()->view($view, [
'errors' => new ViewErrorBag,
'exception' => $e,
], $e->getStatusCode(), $e->getHeaders());
}
return $this->convertExceptionToResponse($e);
}
2) registerErrorViewPaths: этот метод регистрирует путь для представлений об ошибках
/**
* Register the error template hint paths.
*
* @return void
*/
protected function registerErrorViewPaths()
{
$paths = collect(config('view.paths'));
View::replaceNamespace('errors', $paths->map(function ($path) {
return "{$path}/errors";
})->push(__DIR__.'/views')->all());
}
сейчас, если вы хотите создать свою собственную страницу 404 и хотите отобразить ее тогда:
внутри app/Exceptions/Handler.php
public function render($request, Exception $exception)
{
if($this->isHttpException($exception)){
switch ($exception->getStatusCode()) {
case 404:
return view('path-to-custom404-here');
break;
}
}
return parent::render($request, $exception);
}