Intereting Posts
Как проверить, была ли получена почта с помощью php Что такое «$$» в PHP? Изменение пароля yii2 путем проверки текущего пароля с введенным паролем Rscript не работает при вызове на PHP, но из командной строки Как сохранить модель ID на другой странице модели в Cakephp 2 Предупреждение: невозможно изменить информацию заголовка – заголовки, уже отправленные php error беспорядок в мета-коробке в WordPress полная обработка ошибок SQL preg_replace + UTF-8 не работает на одном сервере, но работает на другом Специальная область администратора Opencart -> запросы, показывающие только первую запись таблиц Могу ли я установить Composer в выбранный снимок или только в «официальной» версии Как отправить электронные письма HTML / CSS? Используйте wkhtmltopdf для установки ландшафтной ориентации Laravel: создать или обновить связанную модель? Есть ли способ получить размер переменной PHP в байтах?

Платформа Zend Framework

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

A пришел вокруг $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'); } } 

Линия из application.ini

 resources.layout[] = 

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

 _initLayout() {} 

в Bootstrap.php

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

Надеюсь, теперь это становится яснее.

обратитесь к этой документации за доступными параметрами.

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 будет перебирать массив ресурсов, все, что он распознает, он загружает до лучших своих знаний

🙂

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

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

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

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