Платформа Zend Framework

Я начинаю с Zend Framework, и я хотел бы понять файл Bootstrap. Я узнал, что все методы _init выполняются по умолчанию, но мне кажется смущенным. Во всяком случае, это не то, что я хотел бы спросить.

А появилось действие $this->bootstrap('layout');, и я не уверен, понимаю ли я это. Является ли это переменной resource.layout в файле application.ini? Я хотел бы действительно глубоко понять процесс бутстрапа.

Я прошу вас поэтапно объяснить. Спасибо заранее!

Итак, это мой загрузочный файл:

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

Ответы

Ответ 1

Строка из application.ini

resources.layout[] = 

эквивалентно:

_initLayout() {}

в Bootstrap.php

Оба они инициализируют новый объект, и этот объект устанавливается как параметр bootstrap, который является контейнером для некоторых ресурсов приложения (значения, возвращаемые методами _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

Надеюсь, теперь это станет более ясным.

Ответ 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 очень плохо документированы.

////////////////////////////////////////////////////////////////////////////////

else для практического обучения:

protected function _initIniDump()
{
    $ini = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', 'development');
    Zend_Debug::dump($ini->toArray(), 'APPLICATION.INI');die();
}

В этом дампе вы увидите, что Zend будет перебирать массив ресурсов, все, что он распознает, он загружает в лучшем случае знания

:)

Надеюсь, что это поможет.

Ответ 3

Я выяснил, что: вызов $this- > boostrap ('resource'); не будет работать, если "resource" не находится в файле application/configs/application.ini. Таким образом, мой ответ на ваш вопрос будет "да", вы должны определить ресурс макета в файле application.ini со следующим: resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts" (или другой каталог)

К сожалению, документация zend Framework на самом деле плохой. Особенно на эту тему.

Мое мнение заключается в том, что вы должны дождаться версии с лучшей документацией, если хотите углубиться в детали и работу Zend Framework (или вы можете проверить исходный код классов библиотеки Zend, если у вас есть время).