instalujeme
Takze je nacase si to vyskusat trosku viacej v praxi, a preto sa hned pozrime, ako si symfony nainstalovat.
Takze jednou cestou je stiahnut si tzv sf_sandbox, ktory obsahuje vsetko pripravene, a vy mozete zacat vytvarat aplikaciu. Toto vsak velmi neodporucam (naozaj velmi), kedze druha cesta je ovela pohodlnejsia.
Tak sa pozrime, ako sa to robi tou druhou cestou. Treba mat nainstalovany PEAR (mam dojem ze je to v zakladnej instalacii php, ale fakt si nesom isty). PEAR ma dokonca vecsina hostingov. Ked uz mate pear, zostava nainstalovat symfony:
pear channel-discover pear.symfony-project.com
pear install symfony/symfony
Je treba to robit pod rootom. Ak vsekto prebehlo bez chyb, mate k dispozicii prikaz symfony, ktory si mozete vyskusat:
symfony -V
Malo by vypisat cislo verzie. Teraz sa uz pustime k serioznemu vytvaraniu projektu. Takze sa nahodte do svojho public_html, a vytvorte priecinok napriklad symfony_test. Cd sa donho, a zadajte tieto 2 prikazy:
symfony init-project symfony_test
symfony init-app app
Najprv aby bolo jasne. Struktura symfony aplikacie je rozdelena do aplikacie. Pre normalnu sajtu uplne stacia 2 aplikacie: frontend a backend. Frontend na prezentaciu dat, a backend pre administraciu dat. Nam nateraz staci frontend aplikacia, ktoru si nazveme app.
Ak teraz skusite otvorit vasu sajtu [ otvorte vasa_sajta/symfony_test/web ] zobrazi sa vam oznam o vytvoreni symfony projektu. Pokial sa vam nezobrazuju ziadne obrazky [ pravdepodobne sa nezobrazuju ], je treba ich nalinkovat. Pri standardnej konfiguracii [ /usr/share/pear ]
cd symfony_test/web
ln -s /usr/share/pear/data/symfony/web/sf sf
Pozor link vytvorte v adresari web. Natiahnite si este raz adresar web a uz by sa malo vsetko zobrazit tak, ako ma.
Takze teraz si otvorte priecinok web vasho projektu, a mali by ste vidiet pekny oznam o vytvoreni projektu, teraz uz aj s obrazkami.
Pozor, my budeme pouzivat nieco ine:
vasa_sajta/symfony_test/web/app_dev.php
Pre kazdu aplikaciu, ktoru vytvorite sa automaticky vytvori subor app.php, ale taktiez app_dev.php, kde si vsimnite sikovnu listu na ladenie vsetkeho, co s webdev suvisi.
Teraz ked mame vytvoreny symfony projekt aj aplikaciu, je nacase pozriet sa na generaciu.
Generacia
Takze symfony je totalne zazracna vecicka, ktora vam zakladne operacie CRUD na stranke vygeneruje uplne automaticky.
Vsetko sa generuje zo schema.yml v adresari config. My si teraz vytvorime velmi jednoduchu schemu, ktora sa bude starat o zamestnancov firmy:
propel:
zamestnanec:
id: ~
meno: varchar(255)
created_at: ~
projekt:
id: ~
zamestnanec_id: ~
nazov: varchar(255)
created_at: ~
Pozor konfiguracne subory yml namiesto tabulatorov obsahuju spacy, tak si na to dajte pozor.
Teraz mame napisanu schemu, este si upravime nastavenia databazy.
Takze si upravte subor config/databases.yml a upravte ho nejak takto:
all:
propel:
class: sfPropelDatabase
param:
dsn: mysql://root@localhost/symfony_test
Vytvorte si este databazu symfony_test. Inac tuto sme pouzili mysql, symfony podporuje aj plno dalsich databaz. Kedze mysql je najbeznejsia nebudeme ostatne popisovat [ ani by som nevedel :D ]
Tieto nastavenia sa postaraju o pristup databazy pri pouzivani aplikacie. My vsak chceme aby sa automaticky vytvorili tabulky na zaklade schemy, vratane vztahov medzi tabulkami. Preto potrebujeme nakonfigurovat este jeden subor, a to config/propel.ini.
Upravte tento riadok:
propel.database.url = mysql://root@localhost/symfony_test
A hned pod neho pridajte:
propel.mysql.tableType = InnoDB
To sa postara o to, aby vztahy medzi tabulkami fungovali tak, ako maju.
Teraz by uz spojenie malo byt funkcne, a my sa mozme pustit do samotnej generacie.
Takze zacneme vybudovanim modelu:
V adresari projektu:
symfony propel-build-model
Takto sa automaticky na zaklade schemy vygeneruje model. Model sa generuje do lib/model. Skuste sa pozriet do tohto adresara, a uvidite 2 subory pre kazdu tabulku. Ak si niektory pozriete, uvidite vsak, ze je takmer prazdny! Ano, skutocne funkcie pre modely sa nachadzaju v podadresari om. Je to urobene takto preto, aby ste si mohli pisat vlastne metody, a pri znovu generovani modelu (to budete robit casto, kedze zmeny v scheme su bezna vec) sa vase vlastne metody zachovaju.
Takze model by bol, podme si vygenerovat SQL
symfony propel-build-sql
symfony propel-insert-sql
Hotovo! Ak si teraz pozriete show_tables, vidite 2 tabulky projekt a zamestnanec.
Mozme sa pustit do generacie [ zase? ano! ] zakladnych CRUD operacii.
Tieto zakladne operacie su podla mojho nazoru maximalne uzitocne. Ziadnu cast aplikacie nemusite robit nanovo, vsetko si iba upravujete z vygenerovaneho suboru. A keby vam to nestacilo, mozete si napisat vlastny generator [ napriklad si chcem napisat vlastny generator pre vytvaranie intranetovych aplikacii ].
Tak podme si to hned vyskusat tymto prikazom:
symfony propel-generate-crud app zamestnanec Zamestnanec
Syntax tohoto prikazu je nasledovna:
symfony propel-generate-crud <aplikacia v ktorej sa to ma vygenerovat> <nazov modulu/kontrolera> <nazov modelu>
Nazov modelu je pri generacii vytvoreny camel casovanim, takze i_kill_you bude IKillYou :).
No a nazov modulu zadavate taky, aky chcete potom spristupnit cez:
vasa_sajta/symfony_test/app_dev.php/<nazov modulu>
Predtym nez budete pokracovat este premazte cache prikazom
symfony cc
Takze ak si teraz otvorite
vasa_sajta/symfony_test/app_dev.php/zamestnanec
Mali by ste vidiet vypis zamestnancov [ zatial prazdny ].
No myslim, ze tolko by ku generacii uplne stacilo, takze ozvem sa niekedy nabuduce a hadam napisem nieco o modifikacii modelu alebo nieco podobne :)
No ta instalacia je vcelku killing-procedure, nie kazdy (vratane mna) mame shell ucet na servery, alebo dokonca pristup k root uctu servera.
Ale chvalim tvoj pocin.
----------------------
Ja len v dobrom.
no tak toto si mozes vyskusat na vlastnej masinke :)
ak to chces potom hodit na nejaky server, mozes vyuzit napriklad
symfony freeze
ktory stiahne globalnu lib no konkretneho projektu, ktory potom staci nakopirovat na server
edit: ja napriklad na serveri nemam ani ssh a ide mi to :) akurat safe mode ma poriadne sere :(
a kde hostujes ?
elbia.sk
koli safe mode mi vkuse dava warningy pri glob(), ale vrajze v php5.2.5 uz to bude fixnute, no a moj projekt skor nebude spusteny, takze je to ok:)
sak im napis nech ho vypnu (ak si im uz nepisal), mi vypiname bezne safe_mode na poziadanie
inac php 5.2.5 je uz vonku
heh uz som skusal ale nejak sa k tomu nemaju :!
no taky bych se k tomu moc nemel muze ti to umoznit velmi snadne nabourani systemu ;-) a odhalit adminovo heslo typu "ferda" :D