Symfony2 használata

Symfony kezeléséhez néhány konzolparancsot nézünk meg.

A Symfony2-ben egy webalkalmazás csomagokból épül fel, amiket bundle-nak hívnak. Ezeket egyszerűen letudjuk generálni a következő paranccsal:

# php app/console generate:bundle --namespace=Web/NewsBundle

A Web/NewsBundle egy kitalált név, mindenki azt ír helyére amit akar. Az src mappán belül egy Web mappában fog készülni egy NewsBundle mappba és majd abba generálja a symfony2 a controllereket és egyéb szolgáltatások fájljait.

Ha készítettünk egy adatbázist és annak a tábláit létrehoztuk, akkor szeretnénk gyorsan nekiugrani a fejlesztésnek. Ennek az egyik egyszerű módja az, ha használjuk a symfony2 beépített generátorait. Az adatbázist letudjuk képezni pár parancs kiadásával és tudunk egy grafikus felületet generálni neki. Először xml fájlokat fogunk generálni a \src\Web\NewsBundle\Resources\config\doctrine\ mappába, ahol létrejön így az orm modell. Majd legeneráljuk az entitásokat a \src\Web\NewsBundle\Entity\ mappába. A generálás közben kérdéseket fog feltenni, azokra értelemszerűen kell válaszolni, mindent kiír, hogy mit szeretne :)

$ php app/console doctrine:mapping:import --force WebNewsBundle xml
$ php app/console doctrine:mapping:convert annotation ./src
$ php app/console doctrine:generate:entities Web\NewsBundle


Ha pl enum típusú mező van az adatbázisban, akkor bekell állítani az app/config/config.yml fájlban a következő sorokat és utána már sikerülni fog az importálás:
doctrine:
    dbal:
       mapping_types:
          enum: string

Meg is van az alkalmazásunk adatbázis modelje. A következő paranccsal már egy egyszerű felületet fogunk generálni, ahol majd fogjuk tudni módosítani az adatbázisban lévő adatainkat.

$ php app/console generate:doctrine:crud

Ezzel létrejön \src\Web\NewsBundle\ mappán belül a Controller, a Form, Resource-on belül a Views és a config mappában a routing fájl is módosult, plusz még pár dolog, ami elsőre nem annyira érdekes :)

Ha most megnézzük a böngészőben az eredményt, akkor előfordulhat, hogy csúnya hibaüzenetet kapunk, ha idegen kulcsokat is alkalmaztunk az adatbázisunkban. A generálás során kimaradt(mert lusták voltak a symfony fejlesztői) a __toString() metódust, mely átadja az idegen kulcs legördülő menüjének (szerkesztéskor) a listát, ezért pótolnunk kell. Abban az entity osztályba kell írnunk, amelyikre mutat az idegenkulcs. pl:
Web\NewsBundle\Entity\Users.php:
...
     public function __toString()  
    {  
		return $this->username;  
    } 
...


A symfony2-ben az alkamazásaink, url-jeit(routing listáját) a következő paranccsal ellenőrizhetjük:

# php app/console router:debug
Itt látnunk kell az előbb generált felületünk elérési útját is. Írjuk be a böngészőbe és örüljünk :) Előfordulhat, hogy szeretnénk mások által készített csomagokat is használni. Ezeket a composerrel fogjuk telepíteni. A symfony2 gyökerében található egy composer.json nevű fájl, telepítsünk fel egy media-bundle-t. A composer.json fájlban így módosítsunk:
 
    "require": {
    ...
    "symfony-cmf/media-bundle": "1.2.0"
    }

Majd adjuk ki a következő parancsot:
# php composer.phar require symfony-cmf/media-bundle
vagy
# composer require symfony-cmf/media-bundle

Composerrel telepített bundle-k eltávolítása:
- composer.json-ból töröljük a sorokat
- # composer update parancsot adjuk ki
- AppKernel.php, config.yml, routing.yml -ból töröljük a felesleges sorokat.

Időnként nem árthat frissíteni magát a keretrendszert is. Már csak azért, mert javíthatnak bugokat vagy biztonsági hibákat. A composer.json-ban átkell írni a symfony verziószámát, majd a következő parancsokkal próbálkozhatunk frissíteni:
# composer self-update
# composer update
# composer update symfony/symfony

Segédanyagok:
http://nyukapiszka.wordpress.com/2011/08/06/symfony-2-telepites-bundle-keszites-crud-alapok-es-egyebek-minden-az-egyben/

https://www.youtube.com/watch?v=PONJajuH8P4
https://www.youtube.com/watch?v=ejkTBMQvn3k

http://symfony.com/doc/current/book/doctrine.html

http://tutorial.symblog.co.uk/docs/configuration-and-templating.html
https://github.com/dsyph3r/symblog
http://symblog.co.uk/

http://www.sitepoint.com/building-web-app-symfony-2-development/
 
2014.11.26.