Routing in Contao 4

für Entwickler

Einstieg in das Routing Konzept für Umsteiger von Contao 3

Contao Nordtag Logo

Glen Langer

Version: 1.0.0 vom 27.01.2018

Quellen

  • Online Doku von Symfony / Quellcode Contao
  • Erfahrung durch Ausprobieren

 

Lizenz

Creative Commons Lizenzvertrag
Dieses Werk ist lizenziert unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz.

Über mich

Worum geht es?

  • Wozu und warum Routing?
  • Wie ist das Prinzip
  • Welche Routing-Arten gibt es in Contao
  • Was wird alles benötigt an Definitionen und Dateien
  • Ein Beispiel als Bundle Sourcecode
  • Hinweise für den Spezialfall: AppBundle

Wozu und warum Routing?

  • saubere URLs (SEO)
  • Eliminierung von eigenen Entry Points
  • Wartung, Ansprache per Name im Template

Wie ist das Prinzip

Routing

  • URLs werden anhand einer Konfiguration auf die richtigen PHP Klassen geleitet
  • URLs (Pfade) können dynamisch generiert werden über Name der Route

  • Anpassung der Generation durch Konfiguration möglich, keine Anpassung z.B. im Template nötig
    • Beispiel: aus /blog soll /neues werden

 

Wie ist das Prinzip

Controller

  • wo Routing da auch Controller

  • Controller: PHP-Methoden (Actions) in einer Klasse (Action-Container)

    • Informationen aus dem Request-Objekt von Symfony

Wie ist das Prinzip

Aufbau der URL

  • statische Teile ( contao/install )

  • dynamische Teile möglich (Part in geschweiften Klammern)


  blog_list   /blog/{page}
  blog_show   /blog/{slug}

Beispiel-URLs: /blog/2, /blog/routing

Problem!

Problem

  • Wenn zwei Routen mit derselben URL übereinstimmen, gewinnt die erste geladene Route

 

Lösungsmöglichkeit 1

    blog_list   /blog/{page}, requirements={"page": "\d+"}
    blog_show   /blog/{slug}

Lösungsmöglichkeit 2

  blog_list   /blog/list/{page}
  blog_show   /blog/show/{slug}

Routing-Arten in Contao

Frontend


    visitors_frontend_screencount    /visitors/screencount
                          ..."_scope" = "frontend"

    contao_frontend   /{alias}.html                             
    contao_index      /
    contao_catch_all  /{_url_fragment} 

Routing-Arten in Contao

Backend


    contao_backend        /contao
    contao_backend_login  /contao/login
    
    visitors_backend_details    /visitors/details
                           ..."_scope" = "backend"
                              "_token_check" = true

Routing-Arten in Contao

Backend Main

Entspricht der Contao 3 Variante Callback Modul statt Definition über DCA


    backend_main        /bemain/botstatistik
                 ... "_scope" = "backend"
                     "_token_check" = true
                     "_custom_backend_view" = true

Benötigt EventListener, DependencyInjection, Twig Template, Hook Registrierung

Definitionen und Dateien

Annotations

  • Defintion der Routen über Annotations im PHPDoc Bereich des Controllers

  • Annotations bis Symfony <3.4 nicht von Symfony sondern als SensioFrameworkExtraBundle

  • Alternative ab Symfony 3.4 möglich: Componente nutzen

    use Symfony\Component\Routing\Annotation\Route;

 

Annotations

@Route

  • Bei Class Annotation als Route Prefix
  • Angabe der Route, zusätzlich Default Werte möglich
  • Annotation Namespace:
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

Annotations

@Method

  • GET/POST
  • Annotation Namespace:
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;

Annotations

@Template

  • Verbindet Controller mit Template Datei (Twig)
  • Angabe BundleName : Unterverzeichnis (opt.) : Dateiname des Templates
  • Annotation Namespace:
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

Annotations

@ParamConverter

  • Konverter um Parameter in Objekte zu konvertieren
  • können dann als Attribute abgefragt werden
  • Annotation Namespace:
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;

Annotations

@Cache

  • Definiert HTTP-Caching-Header für Ablauf und Validierung
  • Annotation Namespace:
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;

Annotations

@Security

  • beschränkt den Zugriff auf Controller
  • nur in Symfony 2.4, ab 3.0 in Verbindung mit @IsGranted

Definitionen und Dateien

routing.yml

  • Hinweis auf die Annotations in Resources/config/routing.yml

  • Contao Manager Plugin wird angewiesen die routing.yml zu laden

Hinweise routing.yml

  • keine Tabs in yml Dateien!
  • Normal sind 2 oder 4 Leerzeichen stattdessen.
  • neue Route im "prod" erst nach cache:clear und warmup verfügbar

Routen prüfen

Registrierte Routen anzeigen:


vendor/bin/contao-console debug:router

Route testen:


vendor/bin/contao-console route:match "/blog"

Beispiel: Bundle Sourcecode

Live auf GitHub

BugBuster1701/contao-routing-app

Links

Routing

Controller

Template

Annotations

 

Fragen?

Dann los!

Happy Coding!

Contao Ninja

 

Aktuelle Version dieser Folien auf: docs.contao.ninja

(auch als PDF und später auch als offizielles Video)