Zend_Application — средство начальной загрузки, доступное в Zend Framework начиная с версии 1.8. Хотя использование отдельных компонентов Zend Framework так же просто, как включение исходных файлов, настроить машину MVC гораздо сложнее, а подход к организации надстроек с помощью повторно используемых разделенных ресурсов приложения позволяет управлять процессом, не крича о его сложности. Однако заставить Zend_Application работать с первого раза не так просто, и вот пример того, как он может вам помочь.
Ресурс — это общее название на английском языке; однако в Zend Framework он обозначает небольшой класс или метод, которые Zend_Application может вызывать для установки компонента, такого как соединение с базой данных, объект View или хранилище сеанса. Обычно файл config / application.ini читается, чтобы определить, какие ресурсы должны быть созданы.
Держите окружающую среду в чистоте
Zend_Application поддерживает различные среды, которые вы можете определить (например, тестирование или производство , или любое другое количество сред). Эти среды могут наследовать значения конфигурации друг от друга.
Существует несколько способов определения среды для выбора при запуске: переменная среды, оцененная в конфигурации Apache, или вручную. Это один из двух параметров Zend_Application, другой является полной конфигурацией Ini.
Есть много ресурсов для моих
Ресурсы могут быть определены как метод _init * () класса Boostrap или как отдельные классы.
Ресурсы обычно возвращают что-то, что является продуктом их работы. Например, Zend Framework по умолчанию запускает некоторый ресурс, например, Frontcontroller или View . Последний возвращает объект View, который будет использоваться для рендеринга .phtml-скриптов и который вы можете создавать.
Объект boostrap, внутренний для Zend_Application, может быть захвачен контроллерами или другими ресурсами. Например, они могут
- Требуются другие ресурсы для запуска , определяющие по существу зависимость. Другой ресурс будет запущен только один раз, даже если он будет вызван несколько раз.
- Возьмите продукты других ресурсов , таких как соединение с базой данных.
Ресурсы, которые должны быть запущены, определяются значениями конфигурации, присутствующими в том же файле .ini. По некоторым причинам, имена ресурсов нечувствительны к регистру и обычно не пишутся в camelCase (Frontcontroller, Entitymanagerfactory).
Покажи мне код!
Давайте погрузимся в пример application.ini.
[production] autoloaderNamespaces[] = "My_"
Это означает, что автозагрузчик попытается загрузить классы, начинающиеся с My_, из include_path. Классы должны соответствовать стандарту psr0: например: My_Filter_Klass будет помещен в My / Filter / Klass.php.
Обратите внимание, что этот параметр представляет собой числовой массив, значением которого является My_.
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap"
Эти значения довольно распространены и определяют класс boostrap, содержащий ресурсы, определенные как методы. Вы можете использовать константы в своем INI-файле (APPLICATION_PATH), если они определены в .php-файле, который создает экземпляр Zend_Application.
pluginPaths.ZendX_Doctrine2_Application_Resource_ = "ZendX/Doctrine2/Application/Resource"
Эта опция определяет дополнительный путь для пользовательских ресурсов. Все ресурсы в этой папке теперь будут называться просто по их базовому имени. В этом случае у нас был Entitymanagerfactory, полное имя которого — ZendX_Doctrine2_Application_Resource_Entitymanagerfactory.
resources.view.helperPath.My_View_Helper = "My/View/Helper/" resources.view.helperPath.Zend_View_Helper = APPLICATION_PATH "/views/helpers"
Это первый пример передачи параметров ресурсу. Вид ресурса принимает кучу вариантов, один из них helperPath . helperPath — это ассоциативный массив, который отображает префиксы в папки и используется для определения того, где можно найти классы View Helper.
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
Эта строка вместо этого связана с ресурсом frontController . Опция под пристальным вниманием определяет каталог, содержащий классы контроллера.
resources.entitymanagerfactory.modelsPath = APPLICATION_PATH "/models"
Еще один пример передачи параметра конфигурации в пользовательский ресурс.
Вот скелет класса boostrap:
class Boostrap extends Zend_Application_Boostrap_Bootstrap { public function _initSomething() { // ... return $result; } public function _initDb() { // ... return $pdoConnection; } }
А вот пример вымышленного ресурса приложения:
My_Application_Resource_WorldDominationEngine extends Zend_Application_Resource_ResourceAbstract { public function init() { // lazy-executes the view resource and access its result so that the WorldDominationEngine // can get a reference to the View object $view = $this->bootstrap('view')->getResource(); // ... return $worldDominationEngine; // the product of this resource, that // can be requested by other resources in order to work } }
Помните, что методы Boostrap и классы ресурсов функционально эквивалентны: разница только в формате метода инициализации и ваших предпочтениях относительно организации кода.
После того, как об автозагрузке позаботились , создание экземпляра Zend_Application так же просто, как это:
$application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap() ->run();
рекомендации
Zend_Application связывает вас с Zend Framework немного больше, чем простая старая установка на основе файлов, но упрощает интеграцию и возможность повторного использования всех ресурсов, которые могут потребоваться приложению, в первую очередь внешних подключений к шлюзам и объектным | реляционным | базам данных документов.
Возможность многократного использования также важна: для выполнения функциональных тестов обычно используется отдельный ресурс при тестировании или даже весь набор ресурсов в другой среде. Классическим примером является база данных Sqlite в памяти, а не реальная: это может быть достигнуто путем переопределения одного параметра в разделе конфигурации Ini тестирования .
В завершение вы можете знать, что вы можете сгенерировать скелет приложения , а также его файл конфигурации Ini, выполнив Zend_Tool из командной строки. Мне не нравится этот подход: самостоятельное написание конфигурации и создание структуры папок даст вам учебник, на котором рассматриваются движущиеся части приложения Zend Framework и причинно-следственные связи между ними. Zend_Tool старается не повторять этот процесс снова и снова в новых приложениях.