Вернуть 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;

Похожие записи

Как в OctoberCMS сделать простейшую переадресацию с одной страницы на другую?

Создаём страницу (Page), задаем URL и в секции код добавляем обработчик на хук жизненного цикла страницы. В данном случае это onStart, которая выполняется перед началом загрузки страницы.

function onStart()
{
    return Redirect::to('http://tyapk.ru');
}