<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<sect1 id="zend.application.quick-start">
    <title>Zend_Application - Быстрый старт</title>

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

    <para>
        Если вы планируете использовать <classname>Zend_Tool</classname> для
        создания своего проекта, то продолжайте читать далее. Если вы добавляете
        <classname>Zend_Application</classname> на существующий проект,
        то можете сразу <link linkend="zend.application.quick-start.manual">перейти
        к следующему разделу</link>.
    </para>

    <sect2 id="zend.application.quick-start.zend-tool">
        <title>Использование вместе с Zend_Tool</title>

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

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

        <programlisting language="sh"><![CDATA[
% zf create project newproject
]]></programlisting>

        <para>
            Или команду <filename>zf.bat</filename> на Windows:
        </para>

        <programlisting language="dos"><![CDATA[
C:> zf.bat create project newproject
]]></programlisting>

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

        <programlisting language="text"><![CDATA[
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
]]></programlisting>

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

        <programlisting language="php"><![CDATA[
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
]]></programlisting>

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

        <programlisting language="dosini"><![CDATA[
[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
]]></programlisting>

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

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

        <programlisting language="php"><![CDATA[
// Указание пути к директории приложения
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();
]]></programlisting>

        <para>
            Для того, чтобы продолжить "быстрый старт",
            <link
            linkend="zend.application.quick-start.resources">перейдите к
            разделу про ресурсы</link>.
        </para>
    </sect2>

    <sect2 id="zend.application.quick-start.manual">
        <title>Добавление Zend_Application в приложение</title>

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

        <itemizedlist>
            <listitem><para>
                Создайте файл <filename>application/Bootstrap.php</filename>
                с классом <classname>Bootstrap</classname>.
            </para></listitem>

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

            <listitem><para>
                Измените свой файл <filename>public/index.php</filename>
                с тем, чтобы использовался
                <classname>Zend_Application</classname>.
            </para></listitem>
        </itemizedlist>

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

        <programlisting language="php"><![CDATA[
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
]]></programlisting>

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

        <programlisting language="dosini"><![CDATA[
[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
]]></programlisting>

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

        <programlisting language="php"><![CDATA[
// Указание пути к директории приложения
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();
]]></programlisting>

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

        <programlisting language="conf"><![CDATA[
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]
]]></programlisting>

        <note>
            <title>Узнайте больше о mod_rewrite</title>

            <para>
                Приведенные выше правила перезаписи позволяют получить
                доступ к любому файлу в корневой для веб-документов
                директории вашего виртуального хоста. Если
                в ней есть файлы, которые нужно скрыть от посторонних глаз,
                то вы наверное захотите установить более строгие правила.
                Перейдите на сайт Apache, чтобы
                <ulink
                    url="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html">узнать больше о mod_rewrite</ulink>.
            </para>
        </note>

        <para>
            Теперь вы готовы начать использование
            <classname>Zend_Application</classname>.
        </para>
    </sect2>

    <sect2 id="zend.application.quick-start.resources">
        <title>Добавление и создание ресурсов</title>

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

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

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

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

        <programlisting language="dosini"><![CDATA[
[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
]]></programlisting>

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

        <programlisting language="php"><![CDATA[
<?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>
]]></programlisting>

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

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

        <programlisting language="php"><![CDATA[
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;
    }
}
]]></programlisting>

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

    <sect2 id="zend.application.quick-start.next-steps">
        <title>Следующие шаги с Zend_Application</title>

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