Symfony 1.4 :: Framework Tutorial

Moderne 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>



 

 

Über uns

Wir sind ein agiles Team von Programmierern und haben uns auf Erweiterungen (extensions) für eine Vielzahl von Systemen spezialisiert. Unsere besondere Stärke ist das entwickeln von Erweiterungen für Shop-Systeme basierend auf dem Magento Framework oder die Entwicklung an Web-Anwendungen mit dem Symfony Framework. Eine weitere Stärke ist die Erweiterung von Content Management Systemen wie beispielsweise Wordpress, Typo3, Drupal und Joomla. Das entwickeln von Apps für Android, Windows und Apple OS Systemen ist selbstverständlich!