osob.de Unicorn Logo
Blogpost overview

Routing in Symfony 4: Annotation | 20.08.2018

(Copyright des Bildes siehe Credits)

Ein wesentlicher Standard aktueller PHP-Applikationen ist die Möglichkeit, Routes zu definieren. Routes haben damit die Variante abgelöst, die zu Beginn der 2000er Jahre zum PHP-Standard gehörten: Das Anlegen einer Vielzahl von Dateien, auf die der Nutzer Zugriff hat. Ich möchte kurz auf die Möglichkeit der Definition von Routes in Symfony mit Hilfe der Annotation-Methode eingehen.

You like what you find here? A donation helps to keep this project running.

Aktuelle Anwendungen exposen meist nur eine PHP-Datei (public/index.php). Alle weiteren PHP-Dateien liegen außerhalb des öffentlichen Bereichs und können nicht durch den Besucher direkt angesteuert werden. Die Adressen, die im Browser angezeigt werden, sind also nur virtuell und landen meist bei einem Dispatcher, der wiederum bestimmte Controller aufruft.

Damit das Dispatcher-Element weiß, welche Controller (oder Funktionen) aufgerufen werden müssen, werden sogenannte Routes definiert. Routes sind also die Zuweisung von Adressen zu Code-Teilen.

Viele Frameworks nutzen zur Definition eine Config-Datei, in welcher die Routes entsprechend beschrieben werden. CakePHP nutzt dafür beispielsweise folgenden Code:

// CakePHP3 Example
$routes->connect('/articles', ['controller' => 'Articles', 'action' => 'view']);

In Symfony können die Routes im YAML-Format angegeben werden. Dazu werden diese in der config/routes.yaml wie folgt definiert:

# Symfony 4 Example
index:
    path: /articles
    controller: App\Controller\ArticleController::view

Beide Routes haben das gleiche Ergebnis. Der Aufruf von https://example.com/articles landet im Controller ArticleController und der Methode/Action view.

Routes direkt im Entwicklungsprozess

Die oben gezeigten Beispiele führen im Entwicklungsprozess zu einer Unterbrechung. Ich muss als Entwickler aus der aktuellen Datei raus und die entsprechende Route-Definition anpassen. Besser (und einfacher) geht es mit den Annotations von Symfony 4. Hier gebe ich die Route im Bereich der Beschreibung der Klasse an. Das Beispiel von oben würde dann so aussehen:

use Symfony\Component\Routing\Annotation\Route;

class ArticleController
{
     /**
      * @Route("/articles")
      */
    public function view()
    {
        // some fancy stuff
    }
}

Wirklich eine einfache Möglichkeit, Routes im aktuellen File-Kontext zu erstellen. Damit es auch funktioniert, muss dem Projekt das entsprechende Modul hinzugefügt werden. Dies ist aber via Composer mit composer require annotations schnell erledigt.

Credits

Beitragsbild von marcelaarrubla0329 Pixabay. CC0 Creative Commons: Freie kommerzielle Nutzung, kein Bildnachweis nötig