Zend框架布局
我开始与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');
}
}
我发现的是:调用$这个 - >自举( '资源');如果'resource'不在application/configs/application.ini文件中,将不起作用。所以我对你的问题的回答是'是',你必须在application.ini文件中使用以下命令定义布局资源:resources.layout.layoutPath = APPLICATION_PATH“/ layouts/scripts”(或另一个目录)。
不幸的是zend Framework文档在我看来确实很糟糕。特别是关于这个话题。
我的意见是,如果您想深入了解Zend Framework的细节和工作方式,您应该等待一个更好的文档版本(或者您可以检查Zend库类的源代码,如果您有时间)。
请参考此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公司将遍历数组的资源,任何它承认,它加载到最好的是知识
:)
希望有所帮助。
从application.ini
resources.layout[] =
线等同于:
_initLayout() {}
在Bootstrap.php
它们两者初始化新的对象,并且该对象被设置为bootstrap
PARAM,这是一些应用程序资源的容器(由_init
方法返回的值)。
有逐条执行,因此要保证一个资源之前,当前的初始化,就强制命令,使用:
_initSomeResource() {
$this->bootstrap('otherResource');
// ..
return $someValue;
}
_initOtherResource() {
// ..
}
所以资源的实例化的顺序是:
otherResource
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
希望现在更清楚。
只需链接到我的twitter流上的这个问题https://twitter.com/joedevon/status/2464729062,希望有人会很快弹出一个很好的详细解释。我得到它完全工作,但不完全理解它所做的一切:) – joedevon 2009-07-04 03:53:53
$ this-> bootstrap('layout'); 此行确保已在_initViewHelpers()的其余部分运行之前设置了“布局”。 – berty 2011-02-07 17:55:15