Обработчик 404

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
mader
Сообщения: 84
Зарегистрирован: 2015.06.15, 13:44
Откуда: Воронеж

Обработчик 404

Сообщение mader »

Как обработать 404? У меня не хватает ума. помогите.
На данный момент в случае возникновения ошибку 404, у меня показывается error.php.
Вот но мне бы не хотелось показывать ошибку пользователю. а направить его на индекс, если делаю редирект, то заголовки отправляются 200 OK. Если я правильно понял - это не хорошо. Происковики должны знать что такой страницы нет.

То есть суть такова, нужно показывать другую страницу(редирект или рендер), но заголовки оставить те же 404.
BMW M6
Сообщения: 110
Зарегистрирован: 2014.07.13, 23:19
Откуда: Воронеж

Re: Обработчик 404

Сообщение BMW M6 »

http://www.yiiframework.com/doc-2.0/gui ... onses.html
Отправляйте любой заголовок, какой хотите :)
Аватара пользователя
PaSiS
Сообщения: 88
Зарегистрирован: 2011.11.15, 18:07
Контактная информация:

Re: Обработчик 404

Сообщение PaSiS »

На мой взгляд, вам больше подойдет редирект через секунду или меньше. Можно даже без вывода страницы об ошибке, только заголовки.
Но все же, так делать не стоит - 404 ошибка должна быть, иначе пользователь вполне обоснованно будет задаваться вопрос "Что тут происходит?".
mader
Сообщения: 84
Зарегистрирован: 2015.06.15, 13:44
Откуда: Воронеж

Re: Обработчик 404

Сообщение mader »

в общем, нашел выход из ситуации сдледующий. Расширил класс

Код: Выделить всё

namespace common\exception;
class ErrorAction extends \yii\web\ErrorAction {
....
 public function run()
    {
    ....
      if($exception->statusCode==404){
       return $this->controller->render('view' ?: $controller->id, [ ...]...
      }....
      
}
 
в SiteController

Код: Выделить всё

 public function actions()
    {
        return [
         'error'   => [
           'class' => 'common\exception\ErrorAction',   ..... 


как-то так.
mader
Сообщения: 84
Зарегистрирован: 2015.06.15, 13:44
Откуда: Воронеж

Re: Обработчик 404

Сообщение mader »

В статусе стоит ошибка .все как надо, во view можно писать - рисовать все что угодно. думается правильно получилось.
Аватара пользователя
PaSiS
Сообщения: 88
Зарегистрирован: 2011.11.15, 18:07
Контактная информация:

Re: Обработчик 404

Сообщение PaSiS »

Код: Выделить всё

if($exception->statusCode==404){
       return $this->controller->render('view' ?: $controller->id, [ ...]...
      }.... 
Костыль.
Имхо, лучше все же хедерами:

Код: Выделить всё

header("HTTP/1.0 404 Not Found");
header("Location: " Url::to(['site/index'], true));
 
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Обработчик 404

Сообщение nepster »

PaSiS писал(а):

Код: Выделить всё

if($exception->statusCode==404){
       return $this->controller->render('view' ?: $controller->id, [ ...]...
      }....  
Костыль.
Имхо, лучше все же хедерами:

Код: Выделить всё

header("HTTP/1.0 404 Not Found");
header("Location: " Url::to(['site/index'], true));
  
Почем у костыль ? над функцией header в yii2 есть своя обертка, получается у вас тоже костыль в открытом виде.

id vs redirect, я бы не сказал, что где-то костыль где-то нет из этого. Я бы сказал, что это 2 разных подхода для решения 2 разных задач.
Аватара пользователя
PaSiS
Сообщения: 88
Зарегистрирован: 2011.11.15, 18:07
Контактная информация:

Re: Обработчик 404

Сообщение PaSiS »

nepster писал(а):Я бы сказал, что это 2 разных подхода для решения 2 разных задач.
Да, возможно. Но я все же считаю, что 404 должна отдаваться явно.
nepster писал(а):над функцией header в yii2 есть своя обертка
Я привел просто пример, псевдокод своего рода, должно быть понятно, что это не полноценное решение :)
Ответить