Symfony I. rész – Symfony 1.3 + propel telepítése ubuntu környezetben
Ide egy symfony 1.3 + Propel project elkészítését szánom. Ubuntu rendszeren dolgozom, azért mert egyszerűbb, mint Windowson. Ha Windowson próbálkoznék, akkor is valamilyen virtuális Linuxot (pl: virtualbox) telepítenék fejlesztői teszt környezetnek.
A symfony 1.3-ra pedig azért esett a választás, mert ez az utolsó verzió, ami kompatibilis az 1.0-val. Rengeteg 1.0-as plugin található, aminek nincs 1.2-1.3-1.4-es verziója. Ha esetleg gyorsan be kell üzemelnem valamelyiket, akkor 1.3 alatt talán könnyebb lesz. A propelt pedig azért választottam, mert a cég, ahol dolgozom ezt használja és ezért én sem használtam még doctrinet.
A projektemnél az adatbázis már kész volt és használták is. Erre fogjuk ráhúzni a symfonyt admin felületét.
Telepítsük a hiányzó szoftvereket:
Az alap rendszer az, hogy a LAMP (Linux-Apache-MySql-PHP) környezet már megvolt.
Ha mégsem, akkor egy már telepített Ubuntu/Debian Linuxon, a sudo apt-get install mysql-server phpmyadmin paranccsal a legegyszerűbb telepíteni, egy mozdulattal mindent
Utána jöhet a symfony:
sudo-s #rendszergazda módba váltunk apt-get install php-pear pear channel-discover pear.symfony-project.com pear install symfony/symfony-1.3.5 #ha van újabb, akkor azt apt-get install php5-xsl #xsl php kiterjesztés telepítése, a propelhez kell a2enmod rewrite # mod rewrite /etc/init.d/apache restart exit #kilépünk a rendszergazda módból mkdir sandbox #létrehozzuk a project könyvtárat cd sandbox #belépünk a könyvtárba symfony generate:project sandbox --orm=Propel #project készítése symfony generate:app frontend #alkalmazás létrehozása # hogy a majdani felület kapja meg az alap symfony designt ln -s /usr/share/php/data/symfony/web/sf web/sf
Ezzel létre is hoztunk egy alkalmazást.
Ami problémával szembesülhetünk hogy valamiért nem lehet újraindítani az apache szervert, mert a 80/443-as portok valamelyike már foglalt. Ez általában az /etc/apache/ports.conf fileban keletkezett duplikált bejegyzés miatt fordulhat elő. Töröljük az egyiket…
Most be kell állítanunk az adatbázist. Ez most több fájlt érint, hiszen alapból az 1.3 már doctrine modeleket használ, ha a projektet nem –orm=Propel direktívával hoztuk létre. Mi azzal tettük ![]()
De ha mégsem, akkor először is szükségünk lesz egy propel.ini fájlra a sandbox/config könyvtárunkban. A fájlt nekünk kell létrehozni az alábbi sorokkal. Értelemszerűen át kell szerkeszteni (host,dbname, password, user, output dir), akkor is ha nem mi hoztuk létre.
propel.targetPackage = lib.model
propel.packageObjectModel = true
propel.project = sandbox
propel.database = mysql
propel.database.driver = mysql
propel.database.url = mysql:host=localhost;dbname=teszt
propel.database.creole.url = ${propel.database.url}
propel.database.user = felhsznalo
propel.database.password = jelszo
propel.database.encoding = utf8
; mysql options
propel.mysql.tableType = InnoDB
propel.addVendorInfo = true
propel.addGenericAccessors = true
propel.addGenericMutators = true
propel.addTimeStamp = true
propel.addValidators = false
propel.useDateTimeClass = true
propel.defaultTimeStampFormat = Y-m-d H:i:s
propel.defaultTimeFormat = H:i:s
propel.defaultDateFormat = Y-m-d
propel.schema.validate = false
propel.samePhpName = false
propel.disableIdentifierQuoting = false
propel.emulateForeignKeyConstraints = true
; directories
propel.home = .
propel.output.dir = /home/user/sandbox
propel.schema.dir = ${propel.output.dir}/config
propel.conf.dir = ${propel.output.dir}/config
propel.phpconf.dir = ${propel.output.dir}/config
propel.sql.dir = ${propel.output.dir}/data/sql
propel.runtime.conf.file = runtime-conf.xml
propel.php.dir = ${propel.output.dir}
propel.default.schema.basename = schema
propel.datadump.mapper.from = *schema.xml
propel.datadump.mapper.to = *data.xml
; builder settings
propel.builder.peer.class = plugins.sfPropelPlugin.lib.builder.SfPeerBuilder
propel.builder.object.class = plugins.sfPropelPlugin.lib.builder.SfObjectBuilder
propel.builder.objectstub.class = plugins.sfPropelPlugin.lib.builder.SfExtensionObjectBuilder
propel.builder.peerstub.class = plugins.sfPropelPlugin.lib.builder.SfExtensionPeerBuilder
propel.builder.objectmultiextend.class = plugins.sfPropelPlugin.lib.builder.SfMultiExtendObjectBuilder
propel.builder.mapbuilder.class = plugins.sfPropelPlugin.lib.builder.SfMapBuilderBuilder
propel.builder.addIncludes = false
propel.builder.addComments = true
propel.builder.addBehaviors = true
a config/database.yml fájlt is átszerkesztjük:
dev:
propel:
param:
classname: DebugPDO
debug:
realmemoryusage: true
details:
time: { enabled: true }
slow: { enabled: true, threshold: 0.1 }
mem: { enabled: true }
mempeak: { enabled: true }
memdelta: { enabled: true }
test:
propel:
param:
classname: DebugPDO
all:
propel:
class: sfPropelDatabase
param:
classname: PropelPDO
dsn: mysql:dbname=teszt;host=localhost
username: user
password: password
encoding: utf8
persistent: true
pooling: true
Majd át kell szerkeszteni a config/ProjectConfiguration fájlt is. Engedélyezzük a pluginokat.
public function setup()
{
$this->enableAllPluginsExcept(array('sfDoctrinePlugin'));
// vagy : $this->enablePlugins('sfPropelPlugin');
}
Ezekután az adatbázisunkhoz legeneraálhatjuk a schema.yml fájlt. Majd abból a modelt, a formot és a filtereket. Majd végül az első modulunkat is (modelname a modelünk – táblánk – neve):
# az alábbi paranccsal tudjuk a web könyvtárunkba a szükséges symlinkeket # létrehozni, amire szintén a design miatt lesz szükség ./symfony plugin:publish-assets ./symfony propel:build-schema #ezzel jön létre a config/schema.yml fájl a beállított adatbázis alapján ./symfony propel:build-model #modelek (táblák) legenerálása ./symfony propel:build-form #formok generálása ./symfony propel:build-filter #a táblázatokhoz tartozó filterek legenerálása # vagy az előző 3 helyett csak egyszerűen # ./symfony propel:build-all --classes-only # most pedig következzen a tábláink admin felületének legenerálása: ./symfony propel:generate-admin frontend modelname #a modul is ezt a nevet kapja # vagy ha más néven szeretnénk: #./symfony propel:generate-admin --module="modelnameAdmin" frontend modelname
Az utolsó parancsot érdemes az összes modulunkra (értsd: tábla) lefuttatni.
Én két problémába ütköztem, ezen parncsok futtatásakor.
- A propel nem szereti a default értékként beállított CURRENT_TIMESTAMP-et, viszont a schema.yml-be beírja. Ezért át kellett szerkesztenem a generált fájlban: defaultValue: ‘0000-00-00 00:00:00′.
Ráadásul a hibaüzenet is nagyon buta volt:Szegmens hiba. Na ebből találja ki az ember
- A másik probléma pedig az volt, hogy szerettem volna egyben lefuttatni a model, form, filter építő parancsokat, de elfogyott a memória. Nem tudom melyik memória volt kevés, mert a php.ini-ben a négyszeresére emeltem, de még mindig ugyanannyira kevés volt. De legalább a hibaüzenet és az utasítások érthetők voltak
Zárjuk le egyszerűen a telepítésünket:
Lehetne szenvedni az apache virtuális könyvtáraival, de az egy másik leírás lesz. ![]()
Most egy egyszerű Linux link is megteszi nekünk. Tehát létre kell hozni a /var/www könyvtárban egy linket a projectünknek. Ehhez el lehetne mélyednünk az ln parancs használatában, de én mindig a midnight commandert használtam ehhez. Ha nem lenne feltelepítve, akkor a sudo apt-get install mc paranccsal telepíthetjük. A két ablakos rendszerben a CTRL+X, majd utána S gomb lenyomásával hozhatunk létre linket. Hozzuk hát létre a /var/www könyvtárban egy linket sandbox néven, ami a sandbox/web könyvtárunkra mutat. És a máris elérhető a táblázatunk a http://mydomain/sandbox/index.php/modul url alatt. Ehhez lehet rendszergazdai módba kell váltanunk.
Ha el akarjuk hagyni az index.php -t az URL-ből, akkor az /etc/apache/sites-available/default fájlt kell módosítani. A “Directory” szegmens alatt az AllowOverride None sort módosítani kell AllowOverride All -ra. Ezzel engedélyezzük a .htaccess fájlok használatát. Így a http://mydomain/sandbox/index.php/modul helyett használhatjuk simán a http://mydomain/sandbox/modul URL-t is.
Illetve ha valami hibába ütköznénk, akkor a fehér képernyő helyett a http://mydomain/sandbox/frontend_dev.php/modul alatt informálódhatunk a problémáról. Ha nem localhoston dolgozunk, akkor a frontend_dev.php fájl elején engedélyeznünk kell a saját IP címünket is.

február 26th, 2010 at 15:51
./symfony propel:build-schema #ezzel jön létre a config/schema.yml fájl
idáig eljutottam, nagyon köszönöm ezt a hasznos leírást!
Viszont ha ezt beírom a terminálba, akkor ezt a hibaüzenetet kapom:
Unable to parse file “/home/hatasu/sandbox/config/databases.yml”: A YAML file cannot contain tabs as indentation at line 5 ( propel:).
Mitől lehet ez és hogyan küszöbölhetem ki?
február 26th, 2010 at 17:30
Azt írja, hogy egy tabulátor került bele. Ezt kell valahogy megkeresned. A yml nem szereti a tabulátort, helyette 2 space kell.
március 1st, 2010 at 16:57
Hello!
Én is a végénél akadtam el. Beírom hogy “./symfony propel:build-schema” tölt egy másodpercet és mintha mi sem történt volna, visszaáll. Beírva a következő sort, kiírja, hogy “You must create a schema.yml or schema.xml file.” és tényleg nem hozta létre a config mappában. Viszont a config/doctrine-ban találtam egy schema.yml fájlt.
Mi lehet a probléma?
Köszi a segítséget: Csaba
március 1st, 2010 at 19:44
Az adatbázisodban van valami, vagy üres? Kellene lenni benne legalább egy táblának és nekem az a gyanúm, hogy a tiédben nincs.
Ez a leírás pedig egy már meglévő adatbázisból dolgozna és arra építene rá egy adminisztrátori felületet.
június 8th, 2010 at 07:23
[...] mennék az első rész folyamányaként. Admin generátorról lesz itt is szó, néhány általános probléma [...]