14.2. Zend_Application - Быстрый старт

Есть два пути для начала работы с Zend_Application и выбор одного из них зависит от того, как вы начинаете свой проект. В обоих случаях вы начинаете с создания класса Bootstrap и связанного с ним конфигурационного файла.

Если вы планируете использовать Zend_Tool для создания своего проекта, то продолжайте читать далее. Если вы добавляете Zend_Application на существующий проект, то можете сразу перейти к следующему разделу.

14.2.1. Использование вместе с Zend_Tool

Наиболее быстрый способ начать использование Zend_Application - использовать Zend_Tool для генерации вашего проекта. Он также создаст файл с классом Bootstrap.

Для того, чтобы создать проект, выполните команду zf на системе семейства *nix:

% zf create project newproject

Или команду zf.bat на Windows:

C:> zf.bat create project newproject

Обе создадут структуру проекта, которая будет выглядеть следующим образом:

newproject
|-- application
|   |-- Bootstrap.php
|   |-- configs
|   |   `-- application.ini
|   |-- controllers
|   |   |-- ErrorController.php
|   |   `-- IndexController.php
|   |-- models
|   `-- views
|       |-- helpers
|       `-- scripts
|           |-- error
|           |   `-- error.phtml
|           `-- index
|               `-- index.phtml
|-- library
|-- public
|   `-- index.php
`-- tests
    |-- application
    |   `-- bootstrap.php
    |-- library
    |   `-- bootstrap.php
    `-- phpunit.xml

В схеме выше ваш файл загрузки - newproject/application/Bootstrap.php, поначалу он будет выглядеть следующим образом:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}

Также обратите внимание, что был создан конфигурационный файл newproject/application/configs/application.ini. Его содержимое будет следующим:

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

Все установки в конфигурационном файле предназначены для использования с Zend_Application и вашим файлом загрузки.

Еще один файл, на который стоит обратить внимание - newproject/public/index.php, он создает экземпляр Zend_Application и запускает приложение.

// Указание пути к директории приложения
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH',
              realpath(dirname(__FILE__) . '/../application'));

// Определение текущего режима работы приложения
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV',
              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
                                         : 'production'));

/** Zend_Application */
require_once 'Zend/Application.php';

// Создание объекта приложения, начальная загрузка, запуск
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();

Для того, чтобы продолжить "быстрый старт", перейдите к разделу про ресурсы.

14.2.2. Добавление Zend_Application в приложение

Основные положения работы с Zend_Application довольно просты:

  • Создайте файл application/Bootstrap.php с классом Bootstrap.

  • Создайте конфигурационный файл application/configs/application.ini с базовой конфигурацией, необходимой для Zend_Application.

  • Измените свой файл public/index.php с тем, чтобы использовался Zend_Application.

Сначала создайте свой загрузочный класс Bootstrap. Для этого создайте файл application/Bootstrap.php со следующим содержимым:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}

Теперь создайте свою конфигурацию. В примерах мы будем использовать конфигурацию в формате INI (разумеется, для своего приложения вы можете использовать другой формат - XML или PHP). Создайте файл application/configs/application.ini и добавьте в него следующее:

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

Наконец, приступаем к изменению скрипта public/index.php. Если он не существует, то создайте его, иначе замените его содержимое на следующее:

// Указание пути к директории приложения
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH',
              realpath(dirname(__FILE__) . '/../application'));

// Определение текущего режима работы приложения
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV',
              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
                                         : 'production'));

// Обычно требуется также добавить директорию library/
// в include_path, особенно если она содержит инсталляцию ZF
set_include_path(implode(PATH_SEPARATOR, array(
    dirname(dirname(__FILE__)) . '/library',
    get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';

// Создание объекта приложения, начальная загрузка, запуск
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();

Вы можете заметить, что при установке значения константы режима работы проверяется значение переменной окружения "APPLICATION_ENV". Мы рекомендуем устанавливать ее в своем окружении веб-сервера. В Apache вы можете установить ее либо в своем определении виртуального хоста, либо в своем файле .htaccess. Мы рекомендуем использовать следующее содержимое для вашего файла public/.htaccess:

SetEnv APPLICATION_ENV development

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
[Замечание] Узнайте больше о mod_rewrite

Приведенные выше правила перезаписи позволяют получить доступ к любому файлу в корневой для веб-документов директории вашего виртуального хоста. Если в ней есть файлы, которые нужно скрыть от посторонних глаз, то вы наверное захотите установить более строгие правила. Перейдите на сайт Apache, чтобы узнать больше о mod_rewrite.

Теперь вы готовы начать использование Zend_Application.

14.2.3. Добавление и создание ресурсов

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

В этом разделе мы рассмотрим добавление двух ресурсов в ваше приложение. Сначала мы установим макет и затем настроим ваш объект вида.

Одним из стандартных ресурсов, предоставляемых компонентой Zend_Application, является ресурс "layout". Этот ресурс ожидает, что вы определите значения конфигурации, которые затем будут использоваться для конфигурирования вашего экземпляра Zend_Layout.

Все, что нужно сделать для этого, - обновить конфигурационный файл.

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
; ADD THE FOLLOWING LINES
resources.layout.layout = "layout"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

Создайте директорию application/layouts/scripts/ и файл в ней layout.phtml, если это не было сделано ранее. Для начала хорошо подходит следующий макет (он также связан с ресурсом вида, описанным ниже):

<?php echo $this->doctype() ?>
<html>
<head>
    <?php echo $this->headTitle() ?>
    <?php echo $this->headLink() ?>
    <?php echo $this->headStyle() ?>
    <?php echo $this->headScript() ?>
</head>
<body>
    <?php echo $this->layout()->content ?>
</body>
</html>

Теперь вы должны иметь работающий макет.

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

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initView()
    {
        // Инициализация вида
        $view = new Zend_View();
        $view->doctype('XHTML1_STRICT');
        $view->headTitle('My First Zend Framework Application');

        // Добавление вида в ViewRenderer
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
            'ViewRenderer'
        );
        $viewRenderer->setView($view);

        // Его возвращение, таким образом, он может быть сохранен загрузчиком
        return $view;
    }
}

Этот метод будет автоматически выполняться при запуске приложения и он будет обеспечивать инициализацию вашего вида в соответствии с нуждами вашего приложения.

14.2.4. Следующие шаги с Zend_Application

Все написанное выше должно научить вас основам использования Zend_Application и создания загрузки вашего приложения. С этого места вы должны перейти к созданию методов ресурсов, или, для максимального повторного использования, плагинов ресурсов. Читайте дальше, чтобы узнать больше!