Professionelle Webprojekte mit dem Symfony Framework realisieren

Für manche Projekte benötigst du mehr Flexibilität, als Sie ein WCMS wie beispielsweise WordPress bietet. Symfony ist eine stabile und leistungsstarke Entwicklungsumgebung, die für die Gestaltung vielfältiger Webprojekte verwendet werden kann.

In diesem Artikel geben wir Dir eine kurze Einführung zu Symfony und einen Leitfaden für dessen Anwendung.

Über Symfony

Symfony wurde zum ersten Mal im Januar 2007 veröffentlicht. Seitdem wurde der Symfony-Code einer Vielzahl von Änderungen unterzogen. Die Einsatzmöglichkeiten von Symfony sind überaus vielseitig: von kleinsten Websites bis hin zu Anwendungen auf Unternehmensebene. Komponenten von Symfony bilden sogar die Grundlage für eine Vielzahl weiterer Frameworks (z. B.: Drupal, phpBB, Laravel, and more). Dieses Framework hat sich zum weltweiten Standard für stabile Entwicklungsumgebungen entwickelt und wird von SensioLabs unterstützt, einem Unternehmen mit 13 Jahren Erfahrung im Bereich Softwareentwicklung.

Symfony basiert auf sechs Grundsätzen:

  1. Nicht nur die Entwicklungszeit und Anwendungsunterstützung, sondern auch die Durchführung doppelter Aktionen während der Entwicklung werden minimiert.
  2. Unbegrenzte Flexibilität der Anwendungen: Dank Event Dispatcher und Dependency Injection kann mit dem Code das Unmögliche möglich gemacht werden.
  3. Skalierbarkeit: Alle Komponenten der Anwendung werden als leicht zu integrierende Bundles bereitgestellt (wiederverwendbare Blöcke, die zusätzliche Funktionen bereitstellen).
  4. Stabilität: SensioLabs garantiert Support für wichtige Versionen über drei Jahre.
  5. Zufriedene Entwickler: Das Framework ist sehr komfortabel aufgebaut (Debug-Leiste, Profiler usw.) und erleichtert so die Arbeit der Entwickler.
  6. Dank der extrem umfangreichen Dokumentation können sich Anfänger sehr schnell mit dem Code vertraut machen.
Symfony Basics Overview

Wenn Du ein Webprojekt mit Symfony erstellst, ist es von großer Bedeutung, dass Du Dich für einen zuverlässigen und starken Webhosting-Provider wie 1&1 als Partner entscheidest.

Webhosting mit 1&1

Project creation / Projekt erstellen

Bevor Du ein Projekt startest, musst Du die Datei symfony.phar herunterladen. Wenn Du Linux verwendest, sind folgende Eingaben erforderlich:

$ curl -LsS http://symfony.com/installer > symfony.phar
$ sudo mv symfony.phar /usr/local/bin/symfony
$ chmod a+x /usr/local/bin/symfony

Für Windows:

c:> php -r "readfile('http://symfony.com/installer');" > symfony.phar

Kopiere anschließend die Datei symfony.phar in den Ordner, in dem Dein Projekt gespeichert ist.

Wenn Du eine neue Anwendung erstellen möchtest, gib den Befehl mit Deinem Projektnamen ein. In diesem Beispiel nennen wir unser Projekt „blog“.

# Linux, Mac OS X
$ cd projects/
$ symfony new blog
# Windows
c:> cd projects/
c:projects> php symfony.phar new blog

Die Standardkonfiguration der Anwendung und das Bundle lassen sich schnell und einfach erstellen. Jetzt kannst Du mit der Entwicklung beginnen.

Configuration of the project / Konfiguration

Alle Konfigurationsdateien befinden sich in app/config und enthalten vier Arten von Dateien:

  1. Config: In dieser Datei werden installationsspezifische Anwendungseinstellungen gespeichert.
  2. Parameters: Einstellungen in Verbindung mit der Infrastruktur (DB, Mail)
  3. Security: Sicherheitseinstellungen einschließlich aller Anforderungen hinsichtlich Berechtigungen und Authentifikation
  4. Routing: Routing-Einstellungen, die eine gewisse Flexibilität für benutzerspezifisches URL-Mapping und einfache Änderungen bieten

Es ist immer eine gute Idee, Dein Projekt über die Datei parameters.yml konfigurierbar zu machen. Ab Version 2.3 beinhaltet Symfony die Datei parameters.yml.dist, die dafür als Vorlage verwendet werden kann. Füge alle Parameter zu dieser Vorlage und der Hauptparameterdatei hinzu (auch neue Parameter), damit die Einstellungen bei Portierung des Code auf den Produktionsserver beibehalten werden.

Symfony unterstützt folgende Dateikonfigurationsformate: yml, xml, php array und annotation. Über eine einfache Google-Suche lässt sich eine Vielzahl von Beispielen finden. Um die erforderliche Service-Config in ein neues Format zu konvertieren, kannst Du einen Dienst wie http://converter.rosstuck.com/ verwenden.

Code organization

AppBundle ist eine hervorragende Ressource für die Entwicklung von Anwendungen jeder beliebigen Art. Es eignet sich besonders für kleine Anwendungen. Wenn Du viele verschiedene Logiken nutzt, kannst Du sie einfach in kleine Bundles teilen, damit der Code leichter verständlich wird.

Für die Erstellung eines neuen Bundles kannst Du Folgendes verwenden:

php app/console generate:bundle

Mehr erfahren

Controllers

Damit Dein Code verständlich und leicht lesbar wird, solltest Du bei der Entwicklung von Controllern das Prinzip des „Fat-free Controller“ anwenden. Der Controller übernimmt im Idealfall vier Aufgaben:

  1. eine Anfrage abrufen
  2. ein Formular verarbeiten (sofern eines verwendet wird)
  3. die Dienstmethode abrufen, wenn Deine Anwendung Business-Logik enthält
  4. eine Antwort ausgeben

Mehr über Controller

Routing

Wenn viele Zugangspunkte vorhanden sind, kannst Du Routing-Einstellungen in Annotationen verwenden. Anderenfalls ist es besser, eine individuelle Datei routing.yml in Deinen Bundle-Einstellungen zu verwenden. Beachte bitte, sie zu app/cofig/routing.yml hinzuzufügen.

Mehr über Routing

Templates / Vorlagen

Es wird empfohlen, Vorlagen für Symfony mit der Sprache Twig zu schreiben. Damit lässt sich die Arbeit mit Vorlagen flexibel, schnell und leistungsstark gestalten.

Die Layout-Vorlage sollte am besten im Ordner app/views/… abgelegt werden und die Bundle-Vorlagen unter src/YourBundle/Resources/views/ControllerName/templateName.html.twig

In Twig kommen 3 Arten spezieller Syntax zur Anwendung (definiert von Symfony.com):

{{ ... }}

„Says something“: druckt eine Variable oder das Ergebnis eines Ausdrucks in die Vorlage.

{% ... %}

„Do something“: ein Tag zur Kontrolle der Vorlagenlogik; es wird für die Ausführung von Ausdrücken verwendet (z. B. „for-loops“).

{# ... #}

„Comment something“: entspricht der PHP-Syntax „/* comment */“. Es wird verwendet, um einzeilige oder mehrzeilige Kommentare hinzuzufügen. Der Inhalt der Kommentare wird nicht in den ausgegebenen Seiten angezeigt.

Twig strafft den Prozess der Vorlagenentwicklung, da der Einsatz von Bedingungen, Zyklen, Filtern usw. ermöglicht wird.

Mehr zu Templates

Forms / Formulare

Formulare sind eine der größten Komponenten, die aufgrund ihrer komplizierten Anwendung häufig anders verwendet werden, als dies von ihrem Entwickler vorgesehen war. Symfony bietet glücklicherweise eine Formularkomponente, die diesen Prozess vereinfacht.

Versuche immer, Formulare in einer separaten Klasse zu erstellen. Beispiel eines Klassenformulars:

namespace AppBundleForm;

use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolverInterface;

class PostType extends AbstractType
{
     public function buildForm(FormBuilderInterface $builder, array $options)
    {
           $builder
		->add('title')
		->add('summary', 'textarea')
		->add('content', 'textarea')
		->add('authorEmail', 'email')
		->add('publishedAt', 'datetime');
    }
    
    public function setDefaultOptions(OptionsResolverInterface $resolver)
   {
          $resolver->setDefaults(array(
		'data_class' => 'AppBundleEntityPost'
          ));
   }

    public function getName()
   {
          return 'post';
    }
}

Versuche zudem Formular und Einheit zu verbinden. Dadurch können die Validierung und die Feldtypen automatisch von der Einheitenkonfiguration übernommen werden.

Am besten ist es, die Schaltfläche „Formular senden“ (form submit) in die Vorlage einzubinden. Dies kann folgendermaßen erreicht werden:

namespace AppBundleForm;

use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolverInterface;

class PostType extends AbstractType
{
     public function buildForm(FormBuilderInterface $builder, array $options)
    {
           $builder
		->add('title')
		->add('summary', 'textarea')
		->add('content', 'textarea')
		->add('authorEmail', 'email')
		->add('publishedAt', 'datetime');
    }
    
    public function setDefaultOptions(OptionsResolverInterface $resolver)
   {
          $resolver->setDefaults(array(
		'data_class' => 'AppBundleEntityPost'
          ));
   }

    public function getName()
   {
          return 'post';
    }
}

Mehr zu Forms

Internationalization / Internationalisierung

Durch Internationalisierung und Lokalisierung werden Anwendungen und deren Inhalte an eine spezielle Region oder die Sprache der Benutzer angepasst. Bei Symfony handelt es sich um eine Opt-in-Funktion, die aktiviert werden muss, bevor sie verwendet werden kann. Entferne die Kommentare um die folgende translator configuration option und setze das Eingabegebietsschema für Deine Anwendung:

# app/config/config.yml
   framework:
	# ...
	translator: { fallback: "%locale%" }

# app/config/parameters.yml
   parameters:
	# ...
	locale: en

Es ist besser, Übersetzungsschlüssel und nicht die Zeilen zu verwenden, wenn eine Übersetzung erforderlich wird. Dies kann am einfachsten mithilfe der yaml-Datei für die Übersetzung erreicht werden. Es wird häufig darauf hingewiesen, das xliff-Format für Übersetzungsdateien zu verwenden, allerdings kann dieses Format vieles komplizierter gestalten.

Speichere Deine Übersetzungsdateien in dem zugehörigen Bundle unter src/YourBundle/Resources/translations/someTranslation.yml

Security / Sicherheit

Die Sicherheitseinstellungen werden häufig als einer der schwierigsten Aspekte von Symfony betrachtet. An dieser Stelle möchten wir einige bewährte Praktiken erläutern.

Die Sicherheitseinstellungen werden unter app/config/security.yml und zumeist in Firewalls gespeichert. Beachte bitte: Die Sicherheitskomponente sorgt dafür, dass der Zugriff auf Ressourcen für bestimmte Benutzer unterbunden wird. Die Sicherheitseinstellungen beinhalten Einstellungen für die Authentifizierung (Identität bestätigen) und Autorisierung (Berechtigung zuweisen).

Für die meisten Zwecke ist nur eine Firewall ausreichend. In wenigen Fällen (beispielsweise für einen Web-Teil und eine API) musst Du jedoch zwei Firewalls konfigurieren.

Das nachfolgende Beispiel bezieht sich auf security.yml, über die ein Anmeldeformular zum Abrufen eines Benutzers aus der Datenbank bereitgestellt wird:

security:
    encoders:
        AppBundleEntityUser: bcrypt

    providers:
        database_users:
            entity: { class: AppBundle:User, property: username }

    firewalls:
        secured_area:
            pattern: ^/
            anonymous: true
            form_login:
                check_path: security_login_check
                login_path: security_login_form

            logout:
                path: security_logout
                target: homepage

# ... access_control exists, but is not shown here

Symfony bietet verschiedene Möglichkeiten für die Autorisierung von Benutzern:

  1. Über den Schlüssel access_control in der Datei security.yml – für Sicherheit in der URL-Vorlage
  2. Die Annotation @Security ist eine sehr komfortable Methode (in den meisten Fällen zu bevorzugen).
  3. Über den Dienst security.authorization_checker – in seltenen Fällen

Ein Beispiel der Verwendung der Annotation @Security

use SensioBundleFrameworkExtraBundleConfigurationSecurity;
// ...
/**
* @Security("has_role('ROLE_ADMIN')")
*/
public function newAction()
{
	// ...
}

Nur der Benutzer mit ROLE_ADMIN erhält Zugriff auf die jeweilige Aktion.

Mehr zu Sicherheitseinstellungen

Assets

Zu Vereinfachung der Arbeit mit js/css/images kannst Du die Assetic-Komponente verwenden. Dafür musst Du die Assets in src/YourBundle/Resources/public ablegen.

Es reicht nicht aus, css- und js-Dateien zu erstellen und diese in die Vorlagendatei einzufügen. Du musst sie komprimieren und minimieren und anschließend die kleinere Version verwenden, um die Ladezeit auf dem Client zu beschleunigen. Assetic kann Dir dabei weiterhelfen. Die Erfassung und Minimierung von Dateien erfordert nur wenige einfache Befehle. Mit diesem Befehl suchst und überträgst Du beispielsweise alle Assets in den Ordner Deines Webprojekts:

php app/console assets:install

Mit dem folgenden Befehl erfasst Du alle js- und css-Kombinationen aus Vorlagen in separaten Dateien, um ein schnelles Laden auf dem Client zu ermöglichen.

php app/console assetic:dump --no-debug

Beachte dabei bitte, Deine Umgebung über den Parameter –env anzugeben.

Mithilfe der folgenden Schritte kannst Du Dateien in die Vorlage aufnehmen:

{% stylesheets
	'css/bootstrap.min.css'
	'css/main.css'
	filter='cssrewrite' output='css/compiled/all.css' %}
	<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
{# ... #}
{% javascripts
	'js/jquery.min.js'
	'js/bootstrap.min.js'
	output='js/compiled/all.js' %}
	<script src="{{ asset_url }}"></script>
{% endjavascripts %}

Mehr erfahren

Die wichtigsten Bundles

Symfony wird durch eine große Entwicklergemeinschaft unterstützt, die ständig an Verbesserungen und Erweiterungen arbeitet. Mehr als 2.400 Bundles wurden bereits entwickelt, um eine Vielzahl von Anforderungen zu erfüllen. Aus der Vielfalt von Optionen solltest Du die folgenden nützlichen Bundles in Betracht ziehen:

Fazit

Symfony kann für die Erstellung von Webprojekten jeder beliebigen Größe eingesetzt werden. Dieser Artikel enthält eine Vorstellung des Symfony Framework und Tipps dafür, wie Du mit Deinem ersten Projekt starten kannst. Symfony bietet zudem ein hervorragendes eBook of best practices, das weiterführende Informationen enthält.

Die Vermittlung einer positiven Benutzererfahrung ist für einen erfolgreichen Webauftritt unerlässlich. Daher solltest Du darauf achten, dass Dein Webhosting Paket die leistungsbezogenen Anforderungen Deines Webprojekts erfüllen kann. Durch Auswahl einer Lösung, die über Deine täglichen Anforderungen hinausgeht, kannst Du die Verfügbarkeit und Performance Deiner Website sicherstellen. 1&1 Webhosting bietet auch für die ressourcenintensivsten Webprojekte eine komfortable und leistungsstarke Umgebung.

Weitere Tipps und Hinweise dazu, wie ein erfolgreicher Online-Auftritt gelingt, finden sowohl Anfänger als auch fortgeschrittene Benutzer im 1&1 Blog.

Quelle: Dieser Artikel ist ursprünglich auf http://www.codeproject.com/ erschienen.

Das könnte dich auch interessieren:

Content-Marketing: Der Schlüssel zum Erfolg deiner WordPress-Website ist guter Inhalt
Essentials: Der richtige Stil für gute Web-Texte
Suchmaschinenoptimierung (SEO) – Grundlagen

 

Diesen Beitrag bewerten:

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *