`

zf 的消息路由学习心得

阅读更多

     Jayson Minard的blueprint for php applications中提到了消息入口Bootstrapping的多种实现方式。在zf中1.7中,一个index.php文件的入口已经更近一步的简化。
     当然也是支持传统的写法的。而在FrontController中,接受的url的进行dispatche,其路由情况如下:

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

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

            $router->route($this->_request);
           
            /**
            * 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 {
                $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());

    重点代码:

$router->route($this->_request);

    $router为一个Zend_Controller_Router_Rewrite对象,_request为一个Zend_Controller_Request_Http对象,其封装了一个http请求,其中有一个参数_requestUri,该参数为一个请求的uri,其形式上可能为/index/index?parameter=value。该uri形式上有两段,其中一段为pathInfo,一部分为queryInfo。

    在Zend_Controller_Router_Rewrite有代码如下:

            // TODO: Should be an interface method. Hack for 1.0 BC  
            if (!method_exists($route, 'getVersion') || $route->getVersion() == 1) {
                $match = $request->getPathInfo();
            } else {
                $match = $request;
            }
                       
            if ($params = $route->match($match)) {
                $this->_setRequestParams($request, $params);
                $this->_currentRoute = $name;
                break;
            }

    其中$match为PathInfo,即/index/index。$router为一个Zend_Controller_Router_Route_Module对象,对象中函数match返回一个数组 ["controller"]=> string(5) "index" ["action"]=> string(5) "index" ["module"]=> string(7) "default"。match函数部分代码如下:

        $this->_setRequestKeys();

        $values = array();
        $params = array();
        
        if (!$partial) {
            $path = trim($path, self::URI_DELIMITER);
        } else {
            $matchedPath = $path;
        }

        if ($path != '') {
            $path = explode(self::URI_DELIMITER, $path);

            if ($this->_dispatcher && $this->_dispatcher->isValidModule($path[0])) {
                $values[$this->_moduleKey] = array_shift($path);
                $this->_moduleValid = true;
            }

    其中:

self::URI_DELIMITER

    是一个const,定义如下:

const URI_DELIMITER = '/';

   于是返回如上所示数组。Zend_Controller_Router_Rewrite对象中使用了函数_setRequestParams设置module、controlloer和action的名称。

    于是在类Zend_Controller_Front中的_request中已经具备了router的信息条件。

    未完待续。

 

 

分享到:
评论

相关推荐

    zf2 路由与加载器

    在PHP的世界里,ZF2(Zend Framework 2)是一个广泛使用的开源框架,它提供了一整套工具和服务,帮助开发者构建...通过深入学习和实践,开发者可以更好地利用ZF2框架提供的强大功能,构建出高效且易于维护的应用程序。

    zf_74_image_74zf.com_http://74zf:com_74zf.com_zip_

    标题中的"zf_74_image_74zf.com_http://74zf:com_74zf.com_zip_"似乎是一个组合字符串,可能包含了某种编码或标识信息。然而,它没有直接提供具体的IT知识点。描述中的"Blessed by a friend."则更像是一句祝福语,与...

    ZF框架配置和中文学习文档

    其中包括zf框架的配置资料和中文学习手册。对于初学者有一定帮助。

    ZF_ZF_mmse_zf检测_

    V-BLAST系统的ZF检测ZF检测:线性检测包括ZF(迫零)和MMSE(最小均方误差),检测一般有三步:1、根据准则得到线性加权向量。2、利用线性加权向量得到判决统计量。3、对判决统计量进行判决。

    zf2框架下开发的基本案例

    在学习和实践`ZF2`基本案例时,应重点关注如何设置模块、编写控制器、定义路由、创建视图脚本以及处理数据库交互。此外,理解并运用依赖注入和事件驱动,可以提升代码的可维护性和可扩展性。通过逐步分析和研究提供...

    ZF-ZFSIC-MMSE-MMSESIC_ZF_ZF-SIC_mmse_ZF_SIC_mimo_

    标题中的"ZF-ZFSIC-MMSE-MMSESIC_ZF_ZF-SIC_mmse_ZF_SIC_mimo_"可能表示一种MIMO(Multiple-Input Multiple-Output)通信系统的研究,其中涉及了多种信号处理技术,包括零强迫(Zero-Forcing, ZF)、逐符号干扰消除...

    【含操作视频】通过matlab对比ZF,MMSE,ZF-DFE,MMSE-DFE四种均衡算法误码率

    3.用处:用于ZF,MMSE,ZF-DFE,MMSE-DFE四种均衡算法编程学习 4.指向人群:本硕博等教研学习使用 5.运行注意事项: 使用matlab2021a或者更高版本测试,运行里面的Runme_.m文件,不要直接运行子函数文件。运行时注意...

    zf model zf 模型

    zf model zf 模型,一共两个,第二个.

    MIMO_MMSE_ZF.rar_MIMO MMSE检测_MIMO ZF_MIMO的ZF和MMSE_ZF和MMSE_mimo检测

    本资料主要关注MIMO系统中的两种关键检测算法:最小均方误差(Minimum Mean Square Error, MMSE)检测和零 forcing(Zero-Forcing, ZF)检测。这两种方法都是为了在接收端有效地分离多路信号,减少多径传播导致的...

    zf_基于ZF预编码性能_ZF编码_ZF预编码_ZF预编码_

    基于ZF预编码性能 画出不同准则下误码率和信噪比的曲线

    Ahy_zf.shx

    本文将深入探讨"Ahy_zf.shx"这个特殊字体在CAD环境中的作用及其相关知识点。 首先,".shx"文件是CAD字体的形状文件,全称为Shape Exchange Format。这种文件类型存储了CAD字体的图形定义,用于在图纸中显示特定的...

    ZF AS-tronic变速箱故障码表

    标题"ZF AS-tronic变速箱故障码表"揭示了本文档的核心内容,主要关注的是ZF公司的AS-tronic系列自动变速器可能出现的故障代码及其含义。ZF AS-tronic是一种先进的自动机械变速箱,常见于各类重型车辆,如吊车等。此...

    ZF-007脱机编程下载器

    【ZF-007脱机编程下载器】是一款由智峰工作室精心研发的USB编程工具,专为电子工程师和开发者设计。它具有坚固的金属外壳,小巧轻便且价格实惠,是USB编程下载器市场中的佼佼者,以其稳定性和高性能而备受推崇。 该...

    ZF/MMSE 预编码技术

    ### ZF/MMSE 预编码技术详解 #### 一、多用户MIMO系统概述 多用户MIMO(Multiple Input Multiple Output)系统是现代无线通信技术中的关键组成部分,特别是对于提高无线网络的容量和传输效率至关重要。在多用户...

    采埃孚ZF变速箱培训学习教案.pptx

    采埃孚ZF变速箱培训学习教案.pptx

    采埃孚ZF变速箱培训PPT学习教案.pptx

    "采埃孚ZF变速箱培训PPT学习教案" 本资源摘要信息中,我们将详细介绍采埃孚ZF变速箱的培训学习教案,涵盖变速箱的特点与功能概述、结构组成、工作原理、控制系统、应用场景等方面的知识点。 一、变速箱特点与功能...

    singleusermimo.rar_ZF MMSE ZF-SIC_ZF SIC_ZF 算法_ZF-SIC_ZF,MMSE,

    在无线通信领域,多输入多输出(MIMO)技术是一种重要的技术,它可以显著提升无线通信系统的数据传输速率和...对于学习和研究MIMO系统或者对无线通信感兴趣的读者来说,这个压缩包中的内容无疑提供了宝贵的参考资料。

    【提供操作视频】不同天线数量MIMO通信系统的ZF均衡器和ML均衡器的误码率对比

    3.用处:用于ZF均衡器和ML均衡器算法编程学习 4.指向人群:本硕博等教研学习使用 5.运行注意事项: 使用matlab2021a或者更高版本测试,运行里面的Runme_.m文件,不要直接运行子函数文件。运行时注意matlab左侧的...

    capacity.zip_ZF mmse信道容量_ZF-MMSE Capacity_zf precoding_预编码_预编码 容

    在无线通信领域,预编码(Precoding)是一种用于提高多用户多输入多输出(MIMO)系统性能的技术。...这个"capacity.zip"文件中的代码是一个宝贵的教育资源,可以帮助学习者理解并实践预编码技术和信道容量的计算。

    mimo检测算法zf.zf-sic,mmse,mmse-sic性能matlab仿真

    mimo检测算法zf.zf-sic,mmse,mmse-sic性能曲线的matlab仿真,实测可用

Global site tag (gtag.js) - Google Analytics