2012-10-15 62 views
1

下面是Zend_Bootstrap_init方法的示例從ZF manual。在到底有return命令:返回在ZF Bootstrap類的_init方法中做什麼?

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initView() 
    { 
     // Initialize view 
     $view = new Zend_View(); 
     $view->doctype('XHTML1_STRICT'); 
     $view->headTitle('My First Zend Framework Application'); 

     // Add it to the ViewRenderer 
     $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
      'ViewRenderer' 
     ); 
     $viewRenderer->setView($view); 

     // Return it, so that it can be stored by the bootstrap 
     return $view; // Why return is here? 
    } 
} 

可以通過引導

爲什麼返回儲存在哪裏? Bootstrap在哪裏存儲它,爲什麼?什麼對象調用這個方法,誰得到結果?如果沒有返回會發生什麼?

UPDATE:

上的可用資源插件頁面,in the section about View,他們表現出的Zend_View發起的方式如下:

配置選項是每the Zend_View options

實施例#22樣品查看資源配置

下面是一個示例代碼段INI示出了如何配置視圖 資源。

resources.view .encoding = 「UTF-8」

resources.view .basePath = APPLICATION_PATH 「/視圖/」

而且似乎方便合理,以啓動View這種方式,從application.ini文件,以及他們在Zend_Application快速啓動頁面中寫入的所有其他資源。但在同一時間同一Zend_Application快速啓動頁面上,他們說,View必須從Bootstrap啓動:

現在,我們將添加自定義視圖的資源。當初始化視圖 時,我們需要設置HTML DocType和標題 的缺省值以在HTML頭中使用。這可以通過編輯您的 Bootstrap類來完成,以添加一個方法:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initView() 
    { 
     // Initialize view 
     $view = new Zend_View(); 
     $view->doctype('XHTML1_STRICT');  // the same operations, I can set this in application.ini 
     $view->headTitle('My First Zend Framework Application'); // and this too 

     // Add it to the ViewRenderer 
     $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
      'ViewRenderer' 
     ); 
     $viewRenderer->setView($view); 

     // Return it, so that it can be stored by the bootstrap 
     return $view; 
    } 
} 

和事件更有趣的與其他資源,以Request例如here

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initRequest() 
    { 
     // Ensure the front controller is initialized 

     $this->bootstrap('FrontController'); // why to initialized FC here if it is going to be initialized in application.ini anyway like resource.frontController.etc? 

     // Retrieve the front controller from the bootstrap registry 
     $front = $this->getResource('FrontController'); 

     $request = new Zend_Controller_Request_Http(); 
     $request->setBaseUrl('/foo'); 
     $front->setRequest($request); 

     // Ensure the request is stored in the bootstrap registry 
     return $request; 
    } 
} 

如此看來,他們提供了一種選擇來啓動這種或那種方式的資源。但是哪一個是對的呢?他們爲什麼混合使用?哪一個更好用?

其實我可以從我application.ini刪除所有這些有關FC線:

resources.frontController.baseUrl = // some base url 
resources.frontController.defaultModule = "Default" 
resources.frontController.params.displayExceptions = 1 

並重寫它是這樣的:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
    { 
     protected function _initFrontController() 
     { 

      $this->bootstrap('FrontController'); 
      $front = $this->getResource('FrontController'); 
      $front->set ... 
      $front->set ... // and here I set all necessary options 

      return $front; 
     } 
    } 

是什麼application.ini方式_initResource方式之間的區別?這種差異是否意味着工作中的嚴重問題?

+0

另外,請參閱http://stackoverflow.com/a/6744122/131824 –

回答

1

儘管在經過zend手冊一段時間之後你會得到答案。 但是,我會盡力回答你的問題。

1.爲什麼要退貨?

雖然無需返回,它不是mandatory.A回報僅用於存儲在Zend容器通常是在Zend registry.This存儲的變量可以訪問由您隨時隨地的需要
變量be.If你沒有返回唯一的區別就是你將無法在任何地方獲取變量。 在寫答案時在zend手冊中發現了以下內容。它一定會有所幫助。

作爲一個例子,考慮一個基本看法資源:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initView() 
    { 
     $view = new Zend_View(); 
     // more initialization... 

     return $view; 
    } 
} 
You can then check for it and/or fetch it as follows: 

// Using the has/getResource() pair: 
if ($bootstrap->hasResource('view')) { 
    $view = $bootstrap->getResource('view'); 
} 

// Via the container: 
$container = $bootstrap->getContainer(); 
if (isset($container->view)) { 
    $view = $container->view; 
} 

2.Where引導存儲它,爲什麼?

我認爲第一個答案是這樣的。

3.什麼對象調用這個方法,誰得到結果?

應用程序對象通常會在初始階段調用引導程序,您也可以通過對象調用各個資源方法。但是,如果在調用引導方法時未指定任何參數,則所有資源方法(例如_initView(),_ initRouters())將執行 。

4.如果沒有返回會發生什麼。

由回答1我認爲。

這包含您正在尋找的幾乎所有答案。 http://framework.zend.com/manual/1.12/en/zend.application.theory-of-operation.html

希望它有幫助。

UPDATE:

看到你更新.. 其實這是一個選擇的問題,我認爲。

你想定義資源的地方取決於你。

一直在那裏只有基本的資源在的application.ini文件中定義,大部分資源都從引導加載的項目...

同樣的你的選擇,但是你會感到舒適和使用引導程序加載資源時的靈活性(例如定義自定義路由等)。

這就是我的感受。

+0

非常感謝。這真的有幫助。來自Zend的手冊很難閱讀。而我不明白的是爲什麼要初始化資源兩次。請參閱我的問題的更新,這些小的評論不允許完全代表我的意思。 – Green

相關問題