phalcon forward()不能从辅助函数

时间:2017-12-10 22:44:44

标签: phalcon

我想在我的帮助函数中使用forward()函数。不幸的是我无法管理它。

的IndexController:

class IndexController extends ControllerBase

   public function indexAction()
      $helper = new CustomFunctions();
      $helper->log();
      die('still here');

   {
{

CustomFunctions

class CustomFunctions extends \Phalcon\DI\Injectable{
   public function log(){
      //...
      $this->dispatcher->forward([
            'controller' => 'error',
            'action'     => 'route404'
        ]);

        return false;
   }

}

为什么前锋没有工作?它应该转发我到错误控制器而不是显示索引控制器的消息。谢谢你的所有建议。

1 个答案:

答案 0 :(得分:1)

dispatcher->forward在Phalcon中不起作用。它只是启动另一个控制器和操作的简写,但它不会从当前控制器或操作退出或返回。换句话说,您应该检查$helper->log();是否返回false,如果是,则假设return;exit;即使您使用重定向而不是转发,这意味着它会发送标头客户端的浏览器,它仍然通过Phalcon,只有在Phalcon被告知发送标题后才发送。这允许您在Phalcon中围绕事物编写测试,而不像实际使用标题设置东西。不立即退出允许您在不停止中间测试的情况下测试->forward->redirect之类的内容。如果您需要模拟早期退出,也可以尝试throw方法,然后捕获此类错误以确定是否需要exit;。这种方法可以让您exit;的好处,同时仍然可以测试。或者你可以在已经拥有它的地方扔掉一个骰子,或者从你的错误控制器那里扔掉exit;等。

您可能想要阅读调度循环:
https://docs.phalconphp.com/en/3.2/dispatcher