Что делает возврат в методах _init класса ZF Bootstrap?

Вот пример _init метода Zend_Bootstrap из руководство ZF. В конце есть return команда:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initView()
    {
        // Initialize view
        $view = new Zend_View();
        $view->doctype('XHTML1_STRICT');
        $view->headTitle('My First Zend Framework Application');

        // Add it to the ViewRenderer
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
            'ViewRenderer'
        );
        $viewRenderer->setView($view);

        // Return it, so that it can be stored by the bootstrap
        return $view;    // Why return is here?
    }
}

может быть сохранен бутстрапом

Зачем возвращаться? Где бутстрап хранит его и почему? Какой объект вызывает этот метод и кто получает результат? А что будет, если не вернуть?

ОБНОВЛЕНИЕ:

На странице «Доступные подключаемые модули ресурсов» в разделе о View показан следующий способ инициации Zend_View:

Параметры конфигурации соответствуют параметрам Zend_View. .

Пример № 22. Пример конфигурации ресурса представления

Ниже приведен пример фрагмента INI, показывающий, как настроить ресурс представления.

resources.view.encoding = "UTF-8"

resources.view.basePath = APPLICATION_PATH "/views/"

И кажется удобным и разумным инициировать View таким образом, из файла application.ini вместе со всеми остальными ресурсами, о которых пишут на странице Zend_Application Quick Start. Но в то же время на той же странице Zend_Application Quick Start написано, что View нужно инициировать из Bootstrap:

Теперь мы добавим пользовательский ресурс представления. При инициализации представления нам нужно установить HTML DocType и значение по умолчанию для заголовка, который будет использоваться в заголовке HTML. Этого можно добиться, отредактировав класс Bootstrap, добавив метод:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initView()
    {
        // Initialize view
        $view = new Zend_View();
        $view->doctype('XHTML1_STRICT');     // the same operations, I can set this in application.ini
        $view->headTitle('My First Zend Framework Application');   // and this too

        // Add it to the ViewRenderer
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
            'ViewRenderer'
        );
        $viewRenderer->setView($view);

        // Return it, so that it can be stored by the bootstrap
        return $view;
    }
}

И событие более интересное с другими ресурсами, с Request например здесь:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initRequest()
    {
        // Ensure the front controller is initialized

        $this->bootstrap('FrontController');   // why to initialized FC here if it is going to be initialized in application.ini anyway like resource.frontController.etc?

        // Retrieve the front controller from the bootstrap registry
        $front = $this->getResource('FrontController');

        $request = new Zend_Controller_Request_Http();
        $request->setBaseUrl('/foo');
        $front->setRequest($request);

        // Ensure the request is stored in the bootstrap registry
        return $request;
    }
}

Таким образом, создается впечатление, что они предлагают выбор, инициировать ресурсы тем или иным образом. Но кто тогда прав? Почему они их смешивают? Какой лучше использовать?

На самом деле я могу просто удалить все эти строки о FC из моего application.ini:

resources.frontController.baseUrl = // some base url
resources.frontController.defaultModule = "Default"
resources.frontController.params.displayExceptions = 1

и переписать как-то так:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
        protected function _initFrontController()
        {

            $this->bootstrap('FrontController');
            $front = $this->getResource('FrontController');
            $front->set ...  
            $front->set ...   // and here I set all necessary options

            return $front;
        }
    }

В чем разница между application.ini способом и _initResource способом? Означает ли эта разница что-то серьезное в работе?


person Green    schedule 15.10.2012    source источник
comment
Также см. stackoverflow.com/a/6744122/131824.   -  person David Weinraub    schedule 17.10.2012


Ответы (1)


Хотя вы бы получили свои ответы через некоторое время, просматривая руководство Zend. Однако я постараюсь ответить на ваши вопросы.

1.Зачем возвращать?

Хотя в возврате нет необходимости и он не является обязательным. Возврат используется только для хранения переменной
в контейнере Zend, которым обычно является реестр Zend. Вы можете получить доступ к этой сохраненной переменной в любом месте, где это необходимо. вы не вернете, единственная разница, которую это будет иметь, состоит в том, что вы не сможете получить переменную где угодно. Во время написания ответа в руководстве Zend было обнаружено следующее. Это обязательно поможет.

В качестве примера рассмотрим базовый ресурс представления:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initView()
    {
        $view = new Zend_View();
        // more initialization...

        return $view;
    }
}
You can then check for it and/or fetch it as follows:

// Using the has/getResource() pair:
if ($bootstrap->hasResource('view')) {
    $view = $bootstrap->getResource('view');
}

// Via the container:
$container = $bootstrap->getContainer();
if (isset($container->view)) {
    $view = $container->view;
}

2. Где бутстрап хранит его и почему?

Я думаю, что первый ответит на это.

3. Какой объект вызывает этот метод и кто получает результат?

Объект приложения обычно вызывает начальную загрузку (в самом начале), и вы также можете вызывать отдельные методы ресурсов через объект. Но если вы не укажете никаких параметров при вызове метода начальной загрузки, все методы ресурсов (например, _initView(), _initRouters()) будут выполнены.

4. Что будет, если не вернуть.

Отвечено 1 я думаю.

Это содержит почти все ответы, которые вы ищете. http://framework.zend.com/manual/1.12/en/zend.application.theory-of-operation.html

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

ОБНОВИТЬ:

Видел ваше обновление.. На самом деле, я думаю, это вопрос выбора.

Где вы хотите определить свои ресурсы, зависит от вас.

Работал над проектом, в котором в файле application.ini определены только основные ресурсы, а большая часть ресурсов загружается из начальной загрузки...

Опять же, это ваш выбор, однако вы почувствуете комфорт и гибкость при использовании начальной загрузки для загрузки ресурсов (например, определение пользовательских маршрутов и т. д.).

Вот что я чувствую.

person codisfy    schedule 16.10.2012
comment
Большое Вам спасибо. Это действительно помогло. Руководство от Zend трудно читать. И чего я не понимаю, так это зачем инициализировать ресурсы дважды. Пожалуйста, смотрите обновление к моему вопросу, эти небольшие комментарии не позволяют полностью представить, что я имею в виду. - person Green; 17.10.2012