2009-07-02 155 views
13

我開始與Zend框架,我想了解Bootstrap文件。我已經瞭解了所有_init方法默認執行,但它似乎讓我感到困惑。無論如何,這不是我想問的。Zend框架佈局

A來了$this->bootstrap('layout');行動,我不知道我是否理解這一點。這是application.ini文件中的resource.layout變量嗎?我想深入瞭解bootstrap過程。

我在問你一步一步的解釋。 在此先感謝!

所以這是我的引導文件:

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'); 
    } 
} 
+0

只需鏈接到我的twitter流上的這個問題https://twitter.com/joedevon/status/2464729062,希望有人會很快彈出一個很好的詳細解釋。我得到它完全工作,但不完全理解它所做的一切:) – joedevon 2009-07-04 03:53:53

+0

$ this-> bootstrap('layout'); 此行確保已在_initViewHelpers()的其餘部分運行之前設置了「佈局」。 – berty 2011-02-07 17:55:15

回答

1

我發現的是:調用$這個 - >自舉( '資源');如果'resource'不在application/configs/application.ini文件中,將不起作用。所以我對你的問題的回答是'是',你必須在application.ini文件中使用以下命令定義佈局資源:resources.layout.layoutPath = APPLICATION_PATH「/ layouts/scripts」(或另一個目錄)。

不幸的是zend Framework文檔在我看來確實很糟糕。特別是關於這個話題。

我的意見是,如果您想深入瞭解Zend Framework的細節和工作方式,您應該等待一個更好的文檔版本(或者您可以檢查Zend庫類的源代碼,如果您有時間)。

2

請參考此documentation瞭解可用選項。

Zend_Application將自動引導以資源開頭的application.ini中的任何內容。

請注意,如果你沒有在你的ini文件中放入東西,它將不會被加載。例如。默認情況下不加載佈局。如果您有任何一個,或者兩個,下面的佈局將爲應用程序啓用:

resources.layout.layoutPath = APPLICATION_PATH "/layouts" 
resources.layout.layout = default 

最重要的是要意識到的是,它會加載在那裏你省略值的默認值,讓我解釋一下:通過默認情況下,引導程序不會有可用的視圖資源,因爲ini中沒有設置。但是,如果你把這個在ini:

resources.view[] = 

那麼你可以撥打:

$this->boostrap('view'); 
$view = $this->boostrap()->getResource('view'); 

然後你可以從引導,例如,與你的應用程序的一些看法

$view->doctype("HTML5"); 

此外,您_initAutoload不再是必需的,並且可以與

appnamespace = "" 
在.ini

所取代。我同意bootstrapping和ini選項的記錄很差。

////////////////////////////////////////////// //////////////////////////////////

別的動手學習:

protected function _initIniDump() 
{ 
    $ini = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', 'development'); 
    Zend_Debug::dump($ini->toArray(), 'APPLICATION.INI');die(); 
} 

在這種轉儲你會看到,Zend公司將遍歷數組的資源,任何它承認,它加載到最好的是知識

:)

希望有所幫助。

6

application.ini

resources.layout[] = 

線等同於:

_initLayout() {} 

Bootstrap.php

它們兩者初始化新的對象,並且該對象被設置爲bootstrap PARAM,這是一些應用程序資源的容器(由_init方法返回的值)。

有逐條執行,因此要保證一個資源之前,當前的初始化,就強制命令,使用:

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

_initOtherResource() { 
    // .. 
} 

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

  1. otherResource
  2. someResource

現在,你也可以使用:

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

注意,你可能會遇到Circular Dependency錯誤,當你每一個嘗試之前執行對方。

您可以使用盡可能多的_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 

希望現在更清楚。