zoukankan      html  css  js  c++  java
  • phalcon——调度控制器

    将侦听者绑定到组件上:

    use PhalconMvcDispatcher as MvcDispatcher,

        PhalconEventsManager as EventsManager;

    $di->set('dispatcher', function () {

        // 创建一个事件管理

        $eventsManager = new EventsManager();

        // 为“dispatch”类型附上一个侦听者

        $eventsManager->attach("dispatch", function ($event, $dispatcher) {

            // ...

        });

        $dispatcher = new MvcDispatcher();

        // $eventsManager绑定到视图组件

        $dispatcher->setEventsManager($eventsManager);

        return $dispatcher;

    }, true);

    一个实例化的控制器会自动作为事件调度的侦听者,所以你可以实现回调函数:

    class PostsController extends PhalconMvcController

    {

        public function beforeExecuteRoute($dispatcher)

        {

            // 在每一个找到的动作前执行

        }

        public function afterExecuteRoute($dispatcher)

        {

            // 在每一个找到的动作后执行

        }

    }

    转发执行流到另一个控制器/动作:

    $this->dispatcher->forward(array(

                "controller" => "post",

                "action" => "index"

            ));

    $this->dispatcher->forward(array(

        "action" => "search",

        "params" => array(1, 2, 3)

    ));

    (默认情况下,传递的参数会按URL传递的顺序传给对应的动作,你可以简单的调整你的应用来匹配你想要的URL格式)

    获取参数:

    获取全部参数:

    $params = $this->dispatcher->getParams();  //获取到的是一个数组

    获取指定参数:

    $content = $this->dispatcher->getParam('content');  //获取到的是一个参数值

    利用合适的调度循环事件,你还可以做:

    URL调整   转换动作名

    删除遗留的扩展名   注入模型实例

    处理Not-Found错误

    注意:

         制造一个“forward”并不等同于制造一个HTTP的重定向。尽管这两者表面上最终效果都一样。 “forward”不会重新加载当前页面,全部的重定向都只发生在一个请求里面,而HTTP重定向则需要两次请求 才能完成这个流程。

  • 相关阅读:
    Linux 技巧
    设计模式大集合
    [Java] Design Pattern:Code Shape
    [Java] 设计模式: Code Shape
    BookNote: Refactoring
    读书笔记: 博弈论导论
    读书笔记: 博弈论导论
    读书笔记: 博弈论导论
    读书笔记: 博弈论导论
    读书笔记: 博弈论导论
  • 原文地址:https://www.cnblogs.com/wujuntian/p/4695936.html
Copyright © 2011-2022 走看看