• Zend_Application 流程详解


      本周没什么工作,zend 系统性的东西渐渐忘记,抽时间整理一下代码!Zend_Application 负责加载配置以及初始化资源,所以index.php 会有这行代码

    /** Zend_Application */
    require_once 'Zend/Application.php';
    
    // Create application, bootstrap, and run
    $application = new Zend_Application(
        APPLICATION_ENV,
        APPLICATION_PATH . '/configs/application.ini'
    );
    
    $application->bootstrap()
                ->run();

    Zend_application 如何初始化流程,下面是一个类图

      上面大致画了一下Zend_Application 的类图的关系,Zend_Application 与 bootStrap 是聚合的关系,爱的死去活来,爱的只要你无怨,他也无悔。zend_Application 的主要工作就是加载配置文件application.ini 以及命名空间。其他的工作会代理给bootstrap类处理。

      bootstrap主要负责加载两类资源,分别对应最上面的两个接口。

      1.Zend_Application_Bootstrap_Bootstrapper 是 bootstrap 类的接口,Zend_Application_Bootstrap_BootstrapAbstract 实现Zend_Application_Bootstrap_Bootstrapper 的getClassResources 方法的代码

     if (null === $this->_classResources) {
                if (version_compare(PHP_VERSION, '5.2.6') === -1) {
                    $class        = new ReflectionObject($this);
                    $classMethods = $class->getMethods();
                    $methodNames  = array();
    
                    foreach ($classMethods as $method) {
                        $methodNames[] = $method->getName();
                    }
                } else {
                    $methodNames = get_class_methods($this);
                }
    
                $this->_classResources = array();
                foreach ($methodNames as $method) {
                    if (5 < strlen($method) && '_init' === substr($method, 0, 5)) {
                        $this->_classResources[strtolower(substr($method, 5))] = $method;
                    }
                }
            }

    所谓的classResource 就是在bootstrap 以_init 开头定义的方法 比如

    1.class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    2.{
    3.    protected function _initView()
    4.    {
    5.        // Initialize view
    6.        $view = new Zend_View();
    7.        $view->doctype('XHTML1_STRICT');
    8.        $view->headTitle('My First Zend Framework Application');
    9. 
    10.        // Add it to the ViewRenderer
    11.        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
    12.            'ViewRenderer'
    13.        );
    14.        $viewRenderer->setView($view);
    15. 
    16.        // Return it, so that it can be stored by the bootstrap
    17.        return $view;
    18.    }
    19.}

    2.Zend_Application_Bootstrap_ResourceBootstrapper 定义是加载资源的接口,就是我们在application.ini 以resource开头定义的资源比如

    resources.db.adapter           ="MYSQLI"
    resources.db.params.host        ="localhost"
    resources.db.params.username    ="root"
    resources.db.params.password    ="123456"
    resources.db.params.dbname    ="test"

      资源的加载流程,通过zend_Application 加载配置,通过Zend_Loader_PluginLoader 进行加载文件,并在Zend_Application_Bootstrap_BootstrapAbstract的 loadPluginResource方法进行初始化资源类。

      加载两类资源的入口在Zend_Application_Bootstrap_BootstrapAbstract的 _bootstrap 方法

    protected function _bootstrap($resource = null)
        {
            if (null === $resource) {
                foreach ($this->getClassResourceNames() as $resource) {
                    $this->_executeResource($resource);
                }
    
                foreach ($this->getPluginResourceNames() as $resource) {
                    $this->_executeResource($resource);
                }
            } elseif (is_string($resource)) {
                $this->_executeResource($resource);
            } elseif (is_array($resource)) {
                foreach ($resource as $r) {
                    $this->_executeResource($r);
                }
            } else {
                throw new Zend_Application_Bootstrap_Exception('Invalid argument passed to ' . __METHOD__);
            }
        }

      分别加载calssResource 和 配置的 resource

        注意 :  以上是zend  framwork 1   而非 2。

      --EOF--

  • 相关阅读:
    Salesforce LWC学习(三十七) Promise解决progressindicator的小问题
    Salesforce Consumer Goods Cloud 浅谈篇三之 行动计划(Action Plan)相关配置
    python 3.7环境安装并使用csv
    分享数据库优化文章
    php 5.4 var_export的改进
    CentOS7 启动 firewalld 防火墙失败,查看日志提示超时
    使用 SSL 加密的 JDBC 连接 SAP HANA 数据库
    CAS学习笔记一:CAS 授权服务器简易搭建
    202110期自考总结
    自定义 OpenShift s2i 镜像与模板——OracleJDK8
  • 原文地址:https://www.cnblogs.com/liuzhang/p/3151205.html
Copyright © 2020-2023  润新知