Вернуть 404 из компонента OctoberCMS
Ответ формируется на хуке жизненного цикла onRun
.
class SomeComponent extends ComponentBase
{
public function onRun()
{
return $this->controller->run('404');
}
}
Off topic
В одном из обсуждений Samuel, один из авторов CMS, предложил немного другой вариант:
return \Response::make($this->controller->run('404'), 404);
Не знаю в чем специфика, в обоих случаях возвращается 404 страница со статус кодом 404
. Единственное отличие, которое я нашёл это в свойство экземпляра ответа content
вначале дописывается строка вида HTTP/1.0 404 Not Found Cache-Control: no-cache, private Date: Fri, 22 Dec 2017 05:17:19 GMT
. Для простого ответа достаточно:
return \Response::make('Page not found', 404);`
Под капотом ответа
Метод run(string $url='/') ищет и возвращает запрошенную страницу. Если страница не найдена, она возвращает страницу соответствующую URL /404
. Если такой страницы нет (смотреть в разделе сайта /backend/cms
), то возвращает системную страницу 404. Возвращаемая страница является экземпляром класса Illuminate\Http\Response
, который наследуется от класса Symfony\Component\HttpFoundation\Response
. Возврат объекта Response
позволяет изменить HTTP-код и заголовки ответа.
$response = Response::make($contents, $statusCode);
$response->header('Content-Type', $value);
return $response;