Php Zend框架布局

Php Zend框架布局,php,zend-framework,bootstrapping,Php,Zend Framework,Bootstrapping,我从Zend Framework开始,我想了解引导文件。我了解到所有的\u init方法都是默认执行的,但我觉得这很困惑。无论如何,这不是我想问的 A出现在$this->bootstrap('layout')操作,我不确定我是否理解这一点。这是application.ini文件中的resource.layout变量吗?我想深入了解引导过程 我要求您逐步解释。 提前谢谢 这是我的引导文件: class Bootstrap extends Zend_Application_Bootstrap_Boo

我从Zend Framework开始,我想了解引导文件。我了解到所有的
\u init
方法都是默认执行的,但我觉得这很困惑。无论如何,这不是我想问的

A出现在
$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');
    }
}

我发现:调用$this->boostrap('resource');如果“资源”不在application/configs/application.ini文件中,则将不起作用。因此,我对您的问题的回答是“是”,您必须在application.ini文件中使用以下内容定义布局资源:resources.layout.layoutPath=application_PATH”/layouts/scripts(或其他目录)

不幸的是,我认为zend框架文档非常糟糕。特别是在这个话题上

我的意见是,如果你想深入了解Zend框架的细节和工作原理,你应该等待一个有更好文档的版本(或者如果你有时间的话,你可以查看Zend库类的源代码)。

有关可用的选项,请参阅此

Zend_应用程序将自动引导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将遍历resources数组,它可以识别的任何内容都将根据自己的知识进行加载

:)


希望对您有所帮助。

来自
application.ini

resources.layout[] = 
相当于:

_initLayout() {}
Bootstrap.php中

它们都在初始化新对象,并且该对象被设置为
引导
参数,它是一些应用程序资源(由
\u init
方法返回的值)的容器

一个接一个地执行,因此为了确保在初始化当前资源之前初始化一个资源,您可以使用以下命令强制执行该命令:

_initSomeResource() {
    $this->bootstrap('otherResource');
    // ..
    return $someValue; 
}

_initOtherResource() {
    // .. 
}
因此,资源实例化的顺序是:

  • otherResource
  • someResource
  • 现在,您还可以使用:

    $bootstrap->getParam('someResource'); // returns $someValue
    
    请注意,当您尝试在每个循环依赖之前执行每个循环依赖时,可能会遇到
    循环依赖
    错误

    您可以使用所需的任意多个
    \u init
    方法,但为了使它们可重用,您可以将它们分离到自己的类中,实现
    Zend\u Application\u Resource\u 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
    

    希望现在更清楚。

    是的,在这种情况下,采埃孚手册只是一堆废话,没有例子。真糟糕。我希望不久会有一些教程/或更好的手册。ZF手册有时有点蹩脚,有点像wiki/教程。然而,如果你继续阅读和使用ZF编程,最终你会理解你所使用的所有部件——至少对我来说是这样。这些文件涵盖了大部分内容,但它们分散在各处。因此,要深入了解正在发生的事情,确实需要大量的曝光和摆弄。祝你好运刚刚在我的推特流上链接到这个问题,希望不久有人会突然出现,并给出详细的解释。我让它完全正常工作,但并不完全理解它所做的一切:)$this->bootstrap('layout');此行确保在运行其余的_initViewHelpers()之前已设置“布局”。