15. Zend 路由

原创 2016年08月30日 15:40:44

1. zend1\public\index.php:26

这里写图片描述


2. zend1\library\Zend\Application.php:366

这里写图片描述


3. zend1\library\Zend\Application\Bootstrap\Bootstrap.php:97

这里写图片描述


4. zend1\library\Zend\Controller\Front.php:954
这里写图片描述


5. zend1\library\Zend\Controller\Dispatcher\Standard.php:289
这里写图片描述


6.Zend1\library\Zend\Controller\Action.php:513
这里写图片描述


7.Zend1\application\controllers\TestController.php
这里写图片描述


public function dispatch(Zend_Controller_Request_Abstract $request = null, Zend_Controller_Response_Abstract $response = null)
    {
        if (!$this->getParam('noErrorHandler') && !$this->_plugins->hasPlugin('Zend_Controller_Plugin_ErrorHandler')) {
            // Register with stack index of 100
            require_once 'Zend/Controller/Plugin/ErrorHandler.php';
            $this->_plugins->registerPlugin(new Zend_Controller_Plugin_ErrorHandler(), 100);
        }

        if (!$this->getParam('noViewRenderer') && !Zend_Controller_Action_HelperBroker::hasHelper('viewRenderer')) {
            require_once 'Zend/Controller/Action/Helper/ViewRenderer.php';
            Zend_Controller_Action_HelperBroker::getStack()->offsetSet(-80, new Zend_Controller_Action_Helper_ViewRenderer());
        }

        /**
         * Instantiate default request object (HTTP version) if none provided
         */
        if (null !== $request) {
            $this->setRequest($request);
        } elseif ((null === $request) && (null === ($request = $this->getRequest()))) {
            require_once 'Zend/Controller/Request/Http.php';
            $request = new Zend_Controller_Request_Http();
            $this->setRequest($request);
        }

        /**
         * Set base URL of request object, if available
         */
        if (is_callable(array($this->_request, 'setBaseUrl'))) {
            if (null !== $this->_baseUrl) {
                $this->_request->setBaseUrl($this->_baseUrl);
            }
        }

        /**
         * Instantiate default response object (HTTP version) if none provided
         */
        if (null !== $response) {
            $this->setResponse($response);
        } elseif ((null === $this->_response) && (null === ($this->_response = $this->getResponse()))) {
            require_once 'Zend/Controller/Response/Http.php';
            $response = new Zend_Controller_Response_Http();
            $this->setResponse($response);
        }

        /**
         * Register request and response objects with plugin broker
         */
        $this->_plugins
             ->setRequest($this->_request)
             ->setResponse($this->_response);

        /**
         * Initialize router
         */
        $router = $this->getRouter();
        $router->setParams($this->getParams());

        /**
         * Initialize dispatcher
         */
        $dispatcher = $this->getDispatcher();
        $dispatcher->setParams($this->getParams())
                   ->setResponse($this->_response);

        // Begin dispatch
        try {
            /**
             * Route request to controller/action, if a router is provided
             */

            /**
            * Notify plugins of router startup
            */
            $this->_plugins->routeStartup($this->_request);

            try {
            // 路由器主要负责解析一个请求并且决定什么module、controller、action被请求,并把解析的 URI 放入 $request 对象中
                $router->route($this->_request);
            }  catch (Exception $e) {
                if ($this->throwExceptions()) {
                    throw $e;
                }

                $this->_response->setException($e);
            }

            /**
            * Notify plugins of router completion
            */
            $this->_plugins->routeShutdown($this->_request);

            /**
             * Notify plugins of dispatch loop startup
             */
            $this->_plugins->dispatchLoopStartup($this->_request);

            /**
             *  Attempt to dispatch the controller/action. If the $this->_request
             *  indicates that it needs to be dispatched, move to the next
             *  action in the request.
             */
            do {
            // 派遣开始时,这是为 true,dispatcher 找到方法名时,也设置为 true,标志派遣结束
                $this->_request->setDispatched(true);

                /**
                 * Notify plugins of dispatch startup
                 */
                $this->_plugins->preDispatch($this->_request);

                /**
                 * Skip requested action if preDispatch() has reset it
                 */
                if (!$this->_request->isDispatched()) {
                    continue;
                }

                /**
                 * Dispatch request
                 */
                try {
                    $dispatcher->dispatch($this->_request, $this->_response);
                } catch (Exception $e) {
                    if ($this->throwExceptions()) {
                        throw $e;
                    }
                    $this->_response->setException($e);
                }

                /**
                 * Notify plugins of dispatch completion
                 */
                $this->_plugins->postDispatch($this->_request);
            } while (!$this->_request->isDispatched());//如果为 true 派遣结束
        } catch (Exception $e) {
            if ($this->throwExceptions()) {
                throw $e;
            }

            $this->_response->setException($e);
        }

        /**
         * Notify plugins of dispatch loop completion
         */
        try {
            $this->_plugins->dispatchLoopShutdown();
        } catch (Exception $e) {
            if ($this->throwExceptions()) {
                throw $e;
            }

            $this->_response->setException($e);
        }

        if ($this->returnResponse()) {
            return $this->_response;
        }

        $this->_response->sendResponse();
    }

这里写图片描述

这里写图片描述

该循环大体过程是:

       a.前端控制器开始派遣循环

    b.前端控制器调用派遣器

    c.派遣器获取Request object请求对象,并分析它

    d.派遣器从请求对象中找到对应的Action Controller动作控制器名、

    e.派遣器尝试加载该动作控制器类

    f.动作控制器类加载成功,派遣器实例化动作控制器类

    g.派遣器器从请求对象中找到对应的Action动作名

    h.派遣器将派遣标志设为true,标志着派遣完成

    i.派遣器开始派遣动作控制器类中的Action方法

    j.派遣动作完成,派遣器检测请求对象Request object派遣完成标识是否为false,如果是false则表示还有派遣没有完成,派遣器就再次进入派遣循环过程中;
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Zend Framework 2 入门-路由-route

ZF2的路由功能十分强大,在这里简要的介绍下其使用方法。 我们首先来看看ZendSkeletonApplicatio中Application模块中默认的路由设置 (path:/module/App...

chp15VLAN间路由.pdf

  • 2010-09-26 21:11
  • 186KB
  • 下载

15. Magento路由分发过程解析(四):请求重写

Magento请求重写的目的是在路由对象迭代之前,更改请求对象的请求信息。本质上来说,Magento请求重写允许你更改路由对象需求的路径信息,这就意味着,你可以使用重写系统将一个请求从原本的地址(40...

Zend Framework教程-Zend_Controller_Router路由功能

Zend Framework的路由提供了两个主要功能路由和创建路由。 Zend_Controller_Router的Route类和相应Route目录下的类定义常见的路由操作。 接口Zend_Con...

用Zend OPCache提高PHP的性能

摘要: Zend OPCache的前身是Zend Optimizer + (Zend O+),在PHP5.5的发行版本中自带了Zend O+,并重新命名为:Zend OPCache。但是默认是没有启用...

zend framework开发工具“ZF tool用法介绍”

ZF tool是创建zend framework框架目录结构和结构文件的工具。具体命令使用如下:   1.创建项目      如:在D盘workspace\PHP\下创建一个wwwroot项目,在终端...

zend studio 9.0无限期试用的方法

虽然zend studio 9.0 还是beta版本已经正式版了,但是个人感觉其相对于8.0还是有不少的改进,运行性能也有不小的提升,在zend studio 9.0正式版没有出来之前,我们不知道ze...

zend framework与php 5.3.8的pdo sql server 2008

zend1.1.1 在php 5.3.8环境下,目前支持sql 的pdo连接方式有问题, 需要修改: 1 Zend\Db\Adapter\Pdo\Mssql.php: $_pdoType为->...

Zend Framework 连接 MSSQL数据库遇到的问题及解决过程

依据网站上查到的资料连接MSSQL数据库的步骤如下 注:zend framework通常需要php5.3以上的版本,但php5.3以上版本已经不具备对pdo_mssql数据库的支持,需要手动下载微软...

zend中function的声明

php function test() { echo "abc"; } test(); ?>   结论: 一 编译     a.对 函数声明进行词法分析和语法...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)