一千萬個為什麽

搜索

Zend框架布局

我從Zend Framework開始,我想了解Bootstrap文件。我已經了解到所有的 _init 方法都是默認執行的,但對我來說似乎很困惑。無論如何,這不是我想問的。

A came around the $this->bootstrap('layout'); action and I'm not sure if I understand this. Is this the resource.layout variable in application.ini file? I would like to really understand the bootstrap process in deep.

I'm asking you for step by step explanation. Thanks in advance!

所以這是我的引導文件:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initAutoload()
    {
        $moduleLoader = new Zend_Application_Module_Autoloader(array(
            'namespace' => '',
            'basePath' => APPLICATION_PATH
        ));
        return $moduleLoader;
    }

    function _initViewHelpers()
    {
        $this->bootstrap('layout');

        $layout = $this->getResource('layout');
        $view = $layout->getView();
        $view->doctype('XHTML1_STRICT');
        $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8');
        $view->headTitle()->setSeparator(' - ');
        $view->headTitle('Zend Framework Tutorial');
    }
}

最佳答案

The line from application.ini

resources.layout[] = 

相當於:

_initLayout() {}

in Bootstrap.php

它們都在初始化新對象,並且此對象被設置為 bootstrap param,它是一些應用程序資源(由 _init 方法返回的值)的容器。

為了確保一個資源在當前資源之前被初始化,您可以使用以下命令強制執行該命令:

_initSomeResource() {
    $this->bootstrap('otherResource');
   //..
    return $someValue; 
}

_initOtherResource() {
   //.. 
}

所以實例化資源的順序是:

  1. <�代碼> otherResource </代碼>
  2. <�代碼> someResource </代碼>

現在,你也可以使用:

$bootstrap->getParam('someResource');//returns $someValue

請註意,當您嘗試在每一個之前執行對方時,您可能會遇到循環依賴關系錯誤。

您可以使用您需要的許多 _init 方法,但為了使它們可重用,您可以將它們分離到它們自己的類中,實現 Zend_Application_Resource_Abstract 類。

有一些開箱即用的應用程序資源,您可以在 Zend/Application/Resource 目錄中找到它們。這些是來自 application.ini 的引用的資源,即:

resources.view.encoding = "utf-8" ; in application.ini
Zend/Application/Resource/View.php (path to the resource class)
Zend_Application_Resource_View::setEncoding('UTF-8');//equivalent pseudocode

希望現在更清楚。

轉載註明原文: Zend框架布局