Artikel
von Patrick Froch

Symfony2: Namenskonventionen

Hier geht es um die Namenskonventionen in Symfony2. Also wie sollte man die Namen wählen, damit die Arbeit mit dem Framework möglichst reibungslos klappt und wie findet man die Daten zu einen Namen (z.B. im Core).

Namen der Bundles

Die Namen der Namespaces und Klassen müssen dem Standard PSR-0 für PHP 5.3 folgen. Zusätzlich sind folgende Punkte zu beachten:
  • Es sind nur alphanumerische Zeichen (0-9, a-z, A-Z) und der Unterstrich (_) erlaubt.
  • Die Namen sollten CamelCase sein (sie beginnen mit einem großen Buchstaben und jeder weitere Teil beginnt zur Abtrennung ebenfalls wieder mit einem großen Buchstaben).
  • Es sollten beschreibende Namen verwendet werden, die aus nicht mehr als 2 Wörtern bestehen
  • Die Namen werden mit dem Paket- (oder Firemen-) und optional mit dem Kategorieprefix verbunden.
  • An die Namen wird die Zeichenkette "Bundle" angehängt.
Wenn der Namespace so aussieht: Acme\Bundle\HelloBundle, sieht der gültiger Bundle-Name so aus: AcmeHelloBundle. Es gibt einen Alias für die Bundle-Namen, es werden nur kleine Buchstaben und als Trennzeichen der Unterstrich verwendet. Das Wort Bundle wird weggelassen. Der Alias für AcmeHelloBundle lautet acme_hello.

Speicherort der Bundles

Die Bundels werden im Ordner /src gespeichert. Dort gibt der Namespace die Ordnerhierarchie an. Das Bundle Acme\Bundle\HelloBundle wird z.B. unter /src/Acme/HelloBundle/ gespeichert.

Verzeichnisstruktur

Im Verzeichnis eines Bundles sollte es folgende Struktur geben:
    HelloBundle.php
        Controller/
        Resources/
            meta/
                LICENSE
            config/
            doc/
                index.rst
            translations/
            views/
            public/
        Tests/
Die Dateien HelloBundle.php, Resources/meta/LICENSE und Resources/doc/index.rst zwingend erforderlich. (HelloBundle ist der Name des Bundles und ist entsprechend auszutauschen!)

Die folgenden Verzeichnisse haben eine spezielle Bedeutung:

Typ Verzeichnis
Commands Command/
Controllers Controller/
Service Container Extensions DependencyInjection/
Event Listeners EventListener/
Configuration Resources/config/
Web Resources Resources/public/
Translation files Resources/translations/
Templates Resources/views/
Unit and Functional Tests Tests/

Controller

Die logischen Namen der Controller setzen sich wie folgt zusammen: bundle:controller:action.

Der logische Name AcmeBlogBundle:Blog:show meint das Bundle AcmeBlogBundle (Namespace: Acme\BlogBundle\Controller), die Controller-Klasse BlogController und die Methode showAction.

Zu Beachten ist, dass beim Namespace der Teil \Controller weggelassen wird! Beim Klassennamen wird das Wort Controller weggelassen! Beim Namen der Methode wird das Wort Action weggelassen!
Die Klasse kann dann ungefähr so aussehen:

Templates

Bei den Templates ist es ähnlich wie bei den Controllern, nur das es hier keine Namespaces gibt. Die logischen Namen setzen sich so zusammen: BundleName:ControllerName:TemplateName und meinen folgenden Pfad: /path/to/BundleName/Resources/views/ControllerName/TemplateName
Auch hier wird im Namen wieder etwas weggelassen, nämlich /Resources/views/.
Der Name AcmeHelloBundle:Hello:index.html.twig meint also die Datei src/Acme/HelloBundle/Resources/views/Hello/index.html.twig.

Zurück

Einen Kommentar schreiben

Bitte addieren Sie 3 und 2.