我与Zend框架开始,我想了解引导文件。 我已经学会了所有_init
方法默认执行,但它似乎混淆了我。 反正这不是我想问什么。
一转过$this->bootstrap('layout');
行动,我不知道如果我理解这一点。 这是的application.ini文件resource.layout变量? 我想真正了解深的引导过程。
我在问你一步一步的解释。 提前致谢!
所以这是我的引导文件:
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');
}
}
从该行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
希望它现在更清楚。
参阅本文档的可用选项。
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。 我同意,自举和INI选项记录很差。
////////////////////////////////////////////////// //////////////////////////////
其他的实践学习:
protected function _initIniDump()
{
$ini = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', 'development');
Zend_Debug::dump($ini->toArray(), 'APPLICATION.INI');die();
}
在这种转储你会看到,Zend公司将遍历数组的资源,任何它承认,它加载到最好的是知识
:)
希望帮助。
我发现的是:调用$这个 - >自举(“资源”); 如果“资源”是不是在应用程序/ CONFIGS /的application.ini文件将无法正常工作。 所以我的回答你的问题是“是”,你必须用下面的定义在文件的application.ini布局资源:(或其他目录)resources.layout.layoutPath = APPLICATION_PATH“/布局/脚本”
不幸的是,Zend框架的文件在我看来是非常糟糕的。 特别是在这个话题。
我的观点是,你应该等待一个版本有更好的文档,如果你想深进入Zend框架的细节和运作(或者,如果你有时间,你可以检查了Zend库类的源代码)。