# Gyorstalpaló

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

A folytatásban egy projekt `Zend_Tool`-lal való létrehozása, ezt átugorva pedig a `Zend_Application` egy létező projekthez való hozzáadása olvasható.

## A Zend_Tool használata

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

Projekt generálásához végre kell hajtani a `zf` parancsot (*nix rendszereken):

    % zf create project newproject

Vagy a Windows `zf.bat` parancsát:

    C:> zf.bat create project newproject

Mindkettő a következőképp festő projekt szerkezetet alakítja ki:

    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

A fenti ábrán a rendszertöltő a `newproject/application/Bootstrap.php` állományban található, és elsőre a következőképp néz ki:

    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
    }

Ezen kívül egy konfigurációs állomány is létrejött `newproject/application/configs/application.ini` néven, az alábbiakkal:

    [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

Az összes ebben található beállítás a `Zend_Application`-nel és a rendszertöltővel történő használat célját szolgálja.

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

    // 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();

Folytatás az erősforrásokról szóló résznél.

## Hozzáadás az alkalmazáshoz

A `Zend_Application` alapjai meglehetősen egyszerűek:

- Az `application/Bootstrap.php` állomány létrehozása benne a `Bootstrap` osztállyal.

- Az `application/configs/application.ini` konfigurációs állomány elkészítése az alapvető beállításokkal.

- A `public/index.php` átalakítása.

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

    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
    }

Ha ez megvan, el kell készíteni a konfigurációs állományt. Ezen oktatóanyag keretében egy INI stílusú beállítást használunk; ugyanígy használható persze XML vagy PHP is. Az `application/configs/application.ini` tartalma:

    [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

Most pedig alakítsuk át `public/index.php` kapu-szkriptünk. Ha az állomány nem létezik, hozzuk létre, ha igen, cseréljük le a tartalmát:

    // 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();

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 `.htaccess` állományban. A `public/.htaccess` ajánlott tartalma:

    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]

### A mod_rewrite-ról

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 mod_rewrite fejezetét.

Ennél a pontnál a `Zend_Application` működőképes.

## Erőforrások hozzáadása és létrehozása

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.

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.

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

Hogy használhassuk, mindössze a konfigurációs állományt kell frissítenünk.

    [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

Ha még nem tettük, hozzuk létre az `application/layouts/scripts/` könyvtárat, benne pedig a `layout.phtml` állományt. Egy jó elrendezés kezdésképp (ami az utána bemutatott nézettel is összhangban van):

    <?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>

Ennél a pontnál rendelkezünk egy működő elrendezéssel.

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

    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;
        }
    }

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.

## Hogyan tovább

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!