Статьи

Zend Application демистифицирован

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 старается не повторять этот процесс снова и снова в новых приложениях.