У меня есть компонент, настроенный как beforeDispatch
слушатель. Этот компонент проверяет, была ли форма отправлена POST, а затем проверяет, что токен CSRF был правильно отправлен. Если нет, то он должен перейти на специальную страницу уведомлений CSRF. Я специально хочу сделать переадресацию, а не перенаправление, чтобы у пользователей была возможность сообщить, какую страницу они посетили.
Вот мой код:
public function beforeDispatch(\Phalcon\Events\Event $Event,\Phalcon\Mvc\Dispatcher $Dispatcher){
if($this->request->isPost()){
if(!$this->checkToken()){
echo 'before';
$Dispatcher->forward(['controller'=>'index','action'=>'csrf']);
echo 'after';
exit();
}
}
}
Все, что я получаю, это страница, которая отображает «до того». Если я возьму эти echo
s, я просто получаю пустую страницу. Я могу посетить /index/csrf/
вручную, и он отображает страницу, которую я хочу.
Почему запрос не пересылается? Это из цикла отправки?
Вы закодировали:
exit();
?
Я не уверен, что вы можете использовать пересылку здесь, если диспетчер еще не знает, существует ли контроллер и действие в цикле отправки. https://docs.phalconphp.com/en/3.2/dispatcher#dispatch-loop
Но я думаю, что вы можете перехватывать и контролировать, какой класс контроллера и какое действие должен выполнять диспетчер.
$dispatcher->setModuleName(<your module nam if you have one>);
$dispatcher->setNamespaceName(<your controller class>);
$dispatcher->setActionName(<your action name>);
Проверьте документы на диспетчерская петля
Других решений пока нет …