Symfony 1.4 :: Framework Tutorial
Write a commentModerne Web-Programmierung mit dem Symfony Framework
In diesem Tutorial wollen wir die grundlegenden Möglichkeiten des PHP Frameworks "symfony" erläutern.
Symfony ist ein in PHP 5 geschriebenes quelloffenes Web Application Framework welches dem Model View Controller (MVC) Architekturmuster folgt.
Für die Arbeit mit dem Symfony Framework verwenden wir ein Linux Betriebssystem inklusive Apache Webserver mit PHP Integration sowie eine MySQL Datenbank.
Wir gehen davon aus, dass das Symfony Framework heruntergeladen und in
/home/john/workspace/projekt1/lib/vendor ausgepackt vorliegt.
1. Neues Projekt anlegen
Wir legen eine neues Projekt an und zusätzlich gleich ein Frontend.
Symfony erzeugt hierzu die entsprechenden Dateien für die Webseitenansicht.
cd /home/john/workspace/projekt1 php lib/vendor/symfony/data/bin/symfony generate:project projektname php symfony generate:app frontend
2. Apache Seite anlegen
Neue Apache Seite für das Projekt einrichten. Datei: /etc/apache2/sites-available/projekt1
<VirtualHost *:80> ServerName projekt1.localhost DocumentRoot "/home/john/workspace/projekt1/web" DirectoryIndex index.php <Directory "/home/john/workspace/projekt1/web"> AllowOverride All Allow from All </Directory> Alias /sf /home/john/workspace/projekt1/lib/vendor/symfony/data/web/sf <Directory "/home/john/workspace/projekt1/lib/vendor/symfony/data/web/sf"> AllowOverride All Allow from All </Directory> </VirtualHost>
Die Seite aktivieren
a2ensite projekt1
Damit der Servername projekt1.localhost aufgelöst werden kann sollte man entsprechend den DNS Server oder die hosts Datei konfigurieren! Symfony sollte jetzt unter [http://projekt1.localhost] erreichbar sein!
3. Ein [Daten]Modell anlegen
Das Datenmodell wird im yaml-Format in der Datei config/doctrine/schema.yml definiert.
Zur Verwendung des YAML Dateiformats gilt folgende Regel:
1. Keine Tabulatoren verwenden
2. Mindestens 2 Leerzeichen als Einrückung verwenden
Beispiel aus dem Practial Symphony
# config/doctrine/schema.yml JobeetCategory: actAs: { Timestampable: ~ } columns: name: { type: string(255), notnull: true, unique: true } JobeetJob: actAs: { Timestampable: ~ } columns: category_id: { type: integer, notnull: true } logo: { type: string(255) } url: { type: string(255) } position: { type: string(255), notnull: true } how_to_apply: { type: string(4000), notnull: true } token: { type: string(255), notnull: true, unique: true } is_public: { type: boolean, notnull: true, default: 1 } is_activated: { type: boolean, notnull: true, default: 0 } expires_at: { type: timestamp, notnull: true } relations: JobeetCategory: { onDelete: CASCADE, local: category_id, foreign: id, foreignAlias: JobeetJobs }
Siehe http://www.symfony-project.org/jobeet/1_4/Doctrine/en/03 Die Anweisung actAs: { Timestampable: ~ } erzeugt in der Tabelle die Spalten
created_at datetime updated_at datetime
Somit wird bei Anlage und bei jeder Änderung des Datensatzes ein Zeitstempel automatisch eingefügt. Datenbank Verbindungsstring einrichten
php symfony configure:database "mysql:host=localhost;dbname=projekt1" root kennwort
Datenbank erzeugen
php symfony doctrine:build --all
4. Testdaten
Testdaten können in data/fixtures/ angelegt werden.
Alle Dateien die sich hier befinden, werden später abgearbeitet.
Beispiele gibt es hier: http://www.symfony-project.org/jobeet/1_4/Doctrine/en/03
Nachdem die Testdaten eingegeben wurden, können diese geladen werden mit:
php symfony doctrine:build --all --and-load
5. Module
Ein einfaches Modul ohne Datenbankanbindung erzeugt man mit:
php symfony generate:module frontend modulname
Will man ein Modul mit Doctrine Zugriff auf eine Tabelle herstellen dann ist folgendes zu tun.
Beispiel:
Tabelle: Tabelle1
Modulname: tab
Parameter --with-show erzeugt die Methode show
php symfony doctrine:generate-module --with-show frontend tab Tabelle1
Es muss jetzt noch eine Route in apps/frontend/config/routeing.yml angelegt werden.
Für den Anfang reicht erst mal eine DoctrineCollection. Siehe 9.Routing.
# apps/frontend/config/routeing.yml tab: class: sfDoctrineRouteCollection options: { model: Tabelle1 }
Jetzt sollte unter http://projekt1.localhost/frontend_dev.php/tab die Tabelle angezeigt werden!
6. Default Layout
Die Datei apps/frontend/templates/layout.php öffnen.
Hier wir das default Layout eingestellt.
Wichtig ist die Ausgabe des Contents
<?php echo $sf_content ?>
Bilder, CSS und JavaScript Dateien packt man am Besten die entsprechenden Unterordner unter web/
- web/css
- web/images
- web/js
7. CSS
In der Datei frontend/config/view.yml können die Texte für die Ausgabe des Titels, Keywords, Language, etc... vorgenommen werden. CSS Dateien die sich im Ordner web/css/ befinden können mit Komma getrennt eingebunden werden. frontend/config/view.yml
stylesheets: [reset-fonts-grids.css, main.css]
Will man CSS Dateien separat für ein Modul einbinden, so muss man unter config/modules/<Modulname>/templates/ eine neue Datei view.yml anlegen. In dieser Datei kann man dann, für die einzelnen Modulausgaben, CSS Dateien einbinden. Beispiel:
indexSuccess: stylesheets: [modul-liste.css] showSuccess: stylesheets: [modul-anzeigen.css]
Alternative
// direktes Einbinden von CSS-Dateien in Template Dateien <?php use_stylesheet('modul-liste.css') ?>
8. Wo findet man was?
Jedes Modul hat im Ordner apps/frontend/modules einen entsprechenden Unterordner für das angelegt Modul.
Modulname
|_ actions CONTROLLER
-> actions.class.php
|_ lib Zuästzliche Klassen, z.B. für Formulare
|_ templates VIEWS
-> _form.php
-> editSuccess.php
-> indexSuccess.php
-> newSuccess.php
-> showSuccess.php
Die YAML Konfigurationsdateien befinden sich in apps/frontend/config/*.yml
rouing.yml ist für das URL Rewrite.
view.yml ist für das Einbinden von CSS, JS und das befüllen der Slots.
security.yml wird später dazu verwendet, zu steuern welche Seiten einen Login benötigen.
Das Standard Layout des Projekts ist in der Datei apps/frontend/templates/layout.php hinterlegt.
9. Routing
Im Prinzip sollte ist es immer eine gute Vorgehensweise, eine neue Seite mit einem Routing zu beginnen
Beispiel:
modul_new_user: url: /modul/neuen-datensatz-anlegen class: sfDoctrineRoute options: { module: mod1, action: newUser }
In dem oben gezeigten Beispiel wird eine Route angelegt mit Namen "modul_new_user". Diese Route startet die Action "newUser" aus dem Module "mod1"
Einen Link auf diese Route setzt man in einem Template Beispielsweise so:
<a href='<?php echo url_for("modul_new_user") ?>'>Neuer Datensatz</a>
You are a guest
or post as a guest
Be the first to comment.