Posted by ba stey
Cover Image

(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-Standarf 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.

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

Damit das Dispatcher-Element weiß, welche Controller (oder Funktionen) aufgeruffen werden müssen, werden sog. 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 bspw. 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 definiet:

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

Beides 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-Definiton anpassen. Besser (und einfacher) geht es mit den Annotation 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