symfony php / instalujeme, generacia

10.11.2007 11:23 | blackhole

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 :)

    • Re: symfony php / instalujeme, generacia 10.11.2007 | 20:40
      Avatar blackhole   Návštevník

      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.

      • Re: symfony php / instalujeme, generacia 11.11.2007 | 07:44
        Avatar blackhole   Návštevník

        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 :(

        • Re: symfony php / instalujeme, generacia 12.11.2007 | 16:30
          Avatar stanojr   Používateľ

          a kde hostujes ?

          • Re: symfony php / instalujeme, generacia 12.11.2007 | 17:53
            Avatar blackhole   Návštevník

            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:)

            • Re: symfony php / instalujeme, generacia 12.11.2007 | 20:03
              Avatar stanojr   Používateľ

              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

              • Re: symfony php / instalujeme, generacia 12.11.2007 | 20:04
                Avatar blackhole   Návštevník

                heh uz som skusal ale nejak sa k tomu nemaju :!

                • Re: symfony php / instalujeme, generacia 16.11.2007 | 11:39
                  Avatar Alexej   Používateľ

                  no taky bych se k tomu moc nemel muze ti to umoznit velmi snadne nabourani systemu ;-) a odhalit adminovo heslo typu "ferda" :D

                  ---- -_ _-_- _-_ _ ---- - -__- -_-- -_ _- - _