xpe*_*int 13 php bootstrapping zend-framework
我从Zend Framework开始,我想了解Bootstrap文件.我已经知道所有_init方法都是默认执行的,但这对我来说似乎很困惑.无论如何,这不是我想问的问题.
A围绕着这个$this->bootstrap('layout');动作,我不确定我是否理解这一点.这是application.ini文件中的resource.layout变量吗?我想深入了解bootstrap过程.
我问你一步一步的解释. 提前致谢!
所以这是我的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');
}
}
Run Code Online (Sandbox Code Playgroud)
来自的线 application.ini
resources.layout[] =
Run Code Online (Sandbox Code Playgroud)
相当于:
_initLayout() {}
Run Code Online (Sandbox Code Playgroud)
在 Bootstrap.php
它们都是初始化新对象,并且此对象设置为bootstrapparam,它是某些应用程序资源的容器(_init方法返回的值).
逐个执行,因此为了确保在当前资源之前初始化一个资源,您可以使用以下命令强制执行以下命令:
_initSomeResource() {
$this->bootstrap('otherResource');
// ..
return $someValue;
}
_initOtherResource() {
// ..
}
Run Code Online (Sandbox Code Playgroud)
因此,实例化资源的顺序是:
otherResourcesomeResource现在,您也可以使用:
$bootstrap->getParam('someResource'); // returns $someValue
Run Code Online (Sandbox Code Playgroud)
请注意,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
Run Code Online (Sandbox Code Playgroud)
希望现在更清楚了.
我发现:调用 $this->boostrap('resource'); 如果“资源”不在 application/configs/application.ini 文件中,则将不起作用。所以我对你问题的回答是“是”,你必须使用以下内容在 application.ini 文件中定义布局资源: resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts" (或另一个目录。)
不幸的是,我认为 zend 框架文档非常糟糕。尤其是在这个话题上。
我的观点是,如果您想深入了解 Zend Framework 的细节和工作原理,您应该等待具有更好文档的版本(或者如果有时间,您可以检查 Zend 库类的源代码)。