Zend框架布局(Zend Framework Layout)

2019-07-29 12:52发布

我与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');
    }
}

Answer 1:

从该行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

希望它现在更清楚。



Answer 2:

参阅本文档的可用选项。

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公司将遍历数组的资源,任何它承认,它加载到最好的是知识

:)

希望帮助。



Answer 3:

我发现的是:调用$这个 - >自举(“资源”); 如果“资源”是不是在应用程序/ CONFIGS /的application.ini文件将无法正常工作。 所以我的回答你的问题是“是”,你必须用下面的定义在文件的application.ini布局资源:(或其他目录)resources.layout.layoutPath = APPLICATION_PATH“/布局/脚本”

不幸的是,Zend框架的文件在我看来是非常糟糕的。 特别是在这个话题。

我的观点是,你应该等待一个版本有更好的文档,如果你想深进入Zend框架的细节和运作(或者,如果你有时间,你可以检查了Zend库类的源代码)。



文章来源: Zend Framework Layout