# Zend_Application - Быстрый старт

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

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

## Использование вместе с 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();

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

## Добавление 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`.

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

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

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

Одним из стандартных ресурсов, предоставляемых компонентой `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;
        }
    }

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

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

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