Как перенаправить посетителя на страницу 404?

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 nooze
  • Группа: Пользователь
  • Сообщений: 6
  • Регистрация: 15.06.2012

15.06.2012 13:40

Приветствую!

С magento развлекаюсь недавно, система не простая, запнулся на одном вопросе и что-то процесс затянулся.

Мне нужно из произвольно места (в данный момент из \app\code\core\Mst\Catalog\Model\Layer\Filter\Attribute.php) вызвать по условию страницу 404 вместо текущей (каталога).

Условие в коде работает верно и даже удалось туда впихнуть ответ сервера 404 через
Mage::app()->getResponse()->setHeader('HTTP/1.1','404 Not Found',true); 
- что наверно не правильно но не в этом вопрос...

Как показать саму страницу 404 (стандартную)? Пробовал
$this->_forward('noRoute');
- получаю ошибку 500 и пустой экран. Каких-то других путей решения не обнаружил.

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

15.06.2012 13:43

В первую очередь вам надо научиться проводить диагностику сбоев с кодом 500.
Причем к Magento этот навык не относится.

#3 nooze
  • Группа: Пользователь
  • Сообщений: 6
  • Регистрация: 15.06.2012

15.06.2012 13:47

Согласен, как раз сейчас этим занимаюсь.
К сожалению это не мой проект и у меня не полный доступ к самому серверу. Кроме того маджента не совсем стандартная.

Меня в первую очередь интересует как это возможно реализовать, а что б уж заработало это мои проблемы...

#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

15.06.2012 13:49

Вслепую без диагностики своего некачественного кода - никак.

#5 nooze
  • Группа: Пользователь
  • Сообщений: 6
  • Регистрация: 15.06.2012

15.06.2012 13:59

Оок

Впихнуть вызов 404 страницы мне нужно в тело
class Mst_Catalog_Model_Layer_Filter_Attribute extends Mst_Catalog_Model_Layer_Filter_Abstract 


Соответственно, когда я делаю
$this->_forward('noRoute');
получается фигня, и сервер мне разумно говорит, что
Invalid method Mst_Catalog_Model_Layer_Filter_Attribute::_forward(Array
(
    [0] => noRoute
)
)


И он конечно прав. А я вернулся к изначальному вопросу - как мне из этого места перенаправиться на 404 (или какая еще информация нужна для овета)?

#6 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

15.06.2012 14:02

Очевидно, за перенаправления посетителя на ту или иную страницу должен отвечать вовсе не объект-атрибут.
Пытаться наделить этой функцкией объект-атрибут весьма недальновидно и идёт вразрез с архитектурой Magento.

#7 nooze
  • Группа: Пользователь
  • Сообщений: 6
  • Регистрация: 15.06.2012

15.06.2012 14:04

Именно поэтому я и пришел на этот форум - спросить как подойти к этой проблеме правильно.

#8 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

15.06.2012 14:06

Перенаправлять посетителя на ту или иную страницу - функция контроллера.
Именно поэтому forward - метод контроллера.

#9 nooze
  • Группа: Пользователь
  • Сообщений: 6
  • Регистрация: 15.06.2012

15.06.2012 14:09

Тогда всё сводится к тому, как его правильно вызвать из класса Mst_Catalog_Model_Layer_Filter_Attribute?

Понимаю что вопрос реально дурацкий, но после многочасового копания по архитектуре мадженты мозг уже не варит и просит оставить его в покое.

#10 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

15.06.2012 14:11

Сама постановка задачи неверна.
Как я уже сказал 2 раза и повторяю третий: атрибут не должен перенаправлять посетителя куда-либо, это задача контроллера.

#11 nooze
  • Группа: Пользователь
  • Сообщений: 6
  • Регистрация: 15.06.2012

15.06.2012 14:16

Хмм да, логически я мысль уловил, из модели это делать странно.

Осталось понять - как узнать, что необходимо сделать перенаправление в контроллере, если само условие я могу реализовать только в модели (оно касается выборки из каталога и атрибутов). Но это уже скорее вопрос логики системы (и отсутствие в данный момент таковой у меня)

#12 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

15.06.2012 14:17

Посмотрите, в каком контексте вызывается _forward в стандартных модулях, и как эти модули решают схожие прикладные задачи.

Поделиться темой: