2009-07-02 170 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 

希望现在更清楚。