<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 17372 -->
<!-- Reviewed: no -->
<sect1 id="zend.application.quick-start">
    <title>Gyorstalpaló</title>

    <para>
        Két útja van a <classname>Zend_Application</classname> használatba
        vételének, attól függően, hogyan kezdjük projektünket. Mindkét esetben
        egy <classname>Bootstrap</classname> osztály és egy vonatkozó
        konfigurációs állomány létrehozása az első.
    </para>

    <para>
        A folytatásban egy projekt <classname>Zend_Tool</classname>-lal való
        létrehozása, ezt
        <link linkend="zend.application.quick-start.manual">átugorva</link>
        pedig a <classname>Zend_Application</classname> egy létező projekthez
        való hozzáadása olvasható.
    </para>

    <sect2 id="zend.application.quick-start.zend-tool">
        <title>A Zend_Tool használata</title>

        <para>
            A <classname>Zend_Application</classname> használatba vételének
            leggyorsabb módja a <classname>Zend_Tool</classname> munkába
            állítása a projekt képzéshez. Ez egyúttal létrehozza a
            <classname>Bootstrap</classname> osztályt és állományt.
        </para>

        <para>
            Projekt generálásához végre kell hajtani a <command>zf</command>
            parancsot (*nix rendszereken):
        </para>

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

        <para>
            Vagy a Windows <filename>zf.bat</filename> parancsát:
        </para>

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

        <para>
            Mindkettő a következőképp festő projekt szerkezetet alakítja ki:
        </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>
            A fenti ábrán a rendszertöltő a
            <filename>newproject/application/Bootstrap.php</filename>
            állományban található, és elsőre a következőképp néz ki:
        </para>

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

        <para>
            Ezen kívül egy konfigurációs állomány is létrejött
            <filename>newproject/application/configs/application.ini</filename>
            néven, az alábbiakkal:
        </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>
            Az összes ebben található beállítás a
            <classname>Zend_Application</classname>-nel és a rendszertöltővel
            történő használat célját szolgálja.
        </para>

        <para>
            Egy másik érdeklődésre számot tartó állomány a
            <filename>newproject/public/index.php</filename>, mely meghívja és
            elindítja a <classname>Zend_Application</classname>-t.
        </para>

        <programlisting language="php"><![CDATA[
// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH',
              realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV',
              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
                                         : 'production'));

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

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();
]]></programlisting>

        <para>
            Folytatás az
            <link linkend="zend.application.quick-start.resources">erősforrásokról</link>
            szóló résznél.
        </para>
    </sect2>

    <sect2 id="zend.application.quick-start.manual">
        <title>Hozzáadás az alkalmazáshoz</title>

        <para>
            A <classname>Zend_Application</classname> alapjai meglehetősen
            egyszerűek:
        </para>

        <itemizedlist>
            <listitem><para>
                Az <filename>application/Bootstrap.php</filename> állomány
                létrehozása benne a <classname>Bootstrap</classname> osztállyal.
            </para></listitem>

            <listitem><para>
                Az <filename>application/configs/application.ini</filename>
                konfigurációs állomány elkészítése az alapvető beállításokkal.
            </para></listitem>

            <listitem><para>
                A <filename>public/index.php</filename> átalakítása.
            </para></listitem>
        </itemizedlist>

        <para>
            Elsőként létre kell hozni a <classname>Bootstrap</classname>
            osztályt az <filename>application/Bootstrap.php</filename>-ban, a
            következőkkel:
        </para>

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

        <para>
            Ha ez megvan, el kell készíteni a konfigurációs állományt. Ezen
            oktatóanyag keretében egy <acronym>INI</acronym> stílusú beállítást
            használunk; ugyanígy használható persze <acronym>XML</acronym> vagy
            <acronym>PHP</acronym> is. Az
            <filename>application/configs/application.ini</filename> tartalma:
        </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>
            Most pedig alakítsuk át <filename>public/index.php</filename>
            kapu-szkriptünk. Ha az állomány nem létezik, hozzuk létre, ha igen,
            cseréljük le a tartalmát:
        </para>

        <programlisting language="php"><![CDATA[
// Elérési út az alkalmazás könyvtárhoz
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH',
              realpath(dirname(__FILE__) . '/../application'));

// Alkalmazáskörnyezet
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV',
              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
                                         : 'production'));

// Jellemzően az include_path-hoz hozzáadásra kerül a library/ könyvtár is,
// főleg ha az tartalmazza a telepített ZF-t
set_include_path(implode(PATH_SEPARATOR, array(
    dirname(dirname(__FILE__)) . '/library',
    get_include_path(),
)));

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

// Alkalmazás létrehozása, betöltése és futtatása
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();
]]></programlisting>

        <para>
            Megfigyelhető, hogy az alkalmazáskörnyezet állandó egy
            „APPLICATION_ENV” környezeti változót keres, ennek beállítását a
            webkiszolgálói környezetben ajánljuk. Apache alatt ez megtehető a
            vhost beállításoknál vagy <filename>.htaccess</filename>
            állományban. A <filename>public/.htaccess</filename> ajánlott
            tartalma:
        </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>A mod_rewrite-ról</title>

            <para>
                A fenti átíró szabályok a virtuális kiszolgáló dokumentum
                gyökére alatti minden állományt elérhetővé tesznek. Ha
                ez nem kívánatos, a szabályok szigoríthatók. Továbbiakért lásd
                az Apache weblapjának 
                <ulink url="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html">mod_rewrite fejezetét</ulink>.
            </para>
        </note>

        <para>
            Ennél a pontnál a <classname>Zend_Application</classname>
            működőképes.
        </para>
    </sect2>

    <sect2 id="zend.application.quick-start.resources">
        <title>Erőforrások hozzáadása és létrehozása</title>

        <para>
            A fentieket követve rendszertöltő osztály igénybe vesz, és
            futtatáskor elindít egy elülső vezérlőt. Azonban minden valószínűség
            szerint ennél egy kicsit több beállításra lesz szükség.
        </para>

        <para>
            Ebben a részben hozzáadunk az alkalmazásunkhoz két erőforrást.
            Első körben üzembe helyezzük az elrendezéseket, ezt követően pedig
            testreszabjuk a nézet objektumot.
        </para>

        <para>
            A <classname>Zend_Application</classname>-nel érkező erőforrások
            egyike az elrendezés, mely egy <classname>Zend_Layout</classname>
            példány beállításához szükséges konfiguráció megadását várja.
        </para>

        <para>
            Hogy használhassuk, mindössze a konfigurációs állományt kell
            frissítenünk.
        </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"
; Adjuk hozzá a következő sorokat
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>
            Ha még nem tettük, hozzuk létre az
            <filename>application/layouts/scripts/</filename> könyvtárat, benne
            pedig a <filename>layout.phtml</filename> állományt. Egy jó
            elrendezés kezdésképp (ami az utána bemutatott nézettel is
            összhangban van):
        </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>
            Ennél a pontnál rendelkezünk egy működő elrendezéssel.
        </para>

        <para>
            Most hozzáadunk egy saját nézet erőforrást. A nézet létrehozásakor
            be akarjuk állítani a <acronym>HTML</acronym> dokumentumtípust és
            egy alapértelmezett értéket a címnek, melyet a
            <acronym>HTML</acronym> dokumentumfejben használhatunk. Mindez
            eléréséhez <classname>Bootstrap</classname> osztályt bővítenünk kell
            egy tagfüggvénnyel:
        </para>

        <programlisting language="php"><![CDATA[
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initView()
    {
        // A nézet beállítása
        $view = new Zend_View();
        $view->doctype('XHTML1_STRICT');
        $view->headTitle('Első Zend Framework alkalmazásom');

        // Hozzáadás a ViewRendererhez
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
            'ViewRenderer'
        );
        $viewRenderer->setView($view);

        // Visszaadjuk, hogy a eltárolódjon a rendszertöltőben
        return $view;
    }
}
]]></programlisting>

        <para>
            A fenti tagfüggvény magától végre lesz hajtva betöltődéskor, és
            biztosítja, hogy a nézet az alkalmazás szükségletei szerint legyen
            beállítva.
        </para>
    </sect2>

    <sect2 id="zend.application.quick-start.next-steps">
        <title>Hogyan tovább</title>
        
        <para>
            A fentiek már elegendők kiindulásnak. A továbblépéshez hozzunk létre
            erőforrás-tagfüggvényeket, vagy – a teljes újrahasználhatóság
            jegyében – erőforrás bővítmény osztályokat. Olvassunk tovább!
        </para>
    </sect2>
</sect1>
