Contao-Camp 2024
Ergebnis 1 bis 19 von 19

Thema: Contao Nordtag: Routing in Contao 4 für Entwickler

  1. #1
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.477
    User beschenken
    Wunschliste

    Standard Contao Nordtag: Routing in Contao 4 für Entwickler

    Hi,
    wer an meiner dortigen Session:
    • Routing in Contao 4 für Entwickler - Einstieg in das Routing Konzept für Umsteiger von Contao 3

    interessiert ist und was für Contao 3 aber noch nie was für Contao 4 programmiert hat, der sollte sich vorher meine Workshop Folien: "Contao 3 Erweiterung nach Contao 4 Bundle" reinziehen.

    Denn der Routing Vortrag baut darauf auf, bzw. setzt halt einige Grundlagen vorraus.
    (Verzeichnisstruktur, Bundle Klasse, Contao Manager Plugin sollten ein Begriff sein)

    Hinweis: Der Vortrag bezieht sich nur auf die Managed Edition von Contao, aber dazu sage ich dann auch vor Ort was.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  2. #2
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.477
    User beschenken
    Wunschliste

    Fehler Update Infos zum Contao Nordtag: Routing in Contao 4 für Entwickler

    An alle die beim Nordtag dabei waren, freut Euch in Kürze auf neue Folien!

    • Ja, es ist möglich, alle Routing Definitionen in der routing.yml zu packen, ganz ohne Annotations in der Controller Klasse. Habs grad ausprobiert, geht super. (Danke Stefan@ManAtWork für den Hinweis zur Lösung)
    • Auch das Problem mit dem Trailing Slash am Ende eines Routing Pfades bei optionalen Anteilen, was zu Fehler führt, kann einfach abgefangen werden.


    Waren da noch weitere Fragen?
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  3. #3
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.477
    User beschenken
    Wunschliste

    Standard Vortrag Routing in Contao 4 für Entwickler - Bonus 1

    Hi,
    das erste Update als Bonus 1 ist nun online. Extra Folien die nur das Thema Routing ohne Annotations beinhaltet.
    Und, Überraschung: auch als Video!

    https://docs.contao.ninja/de/routing-in-contao-4.html

    Meine Demo wurde natürlich auch angepasst. Mehr dazu in den Folien bzw. im Video.


    Happy Coding!
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  4. #4
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.477
    User beschenken
    Wunschliste

    Standard Vortrag Routing in Contao 4 für Entwickler - Bonus 2

    Hi,
    das zweite Update als Bonus 2 ist nun auch online. Extra Folien die nur das Thema Problem Trailing Slash beinhaltet.
    Und, Überraschung: auch als Video!

    https://docs.contao.ninja/de/routing-in-contao-4.html

    Meine Demo wurde natürlich auch angepasst. Mehr dazu in den Folien bzw. im Video.


    Happy Coding!
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  5. #5
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Hallo,

    vielen Dank für diesen Beitrag!
    Er beschäftigt sich genau mit einem Problem, welches ich gerade versuche an zu gehen: trailing slash.

    Ich finde die Idee die entsprechende Route (wegnehmen des trailing slashs) zu erstellen interessant.
    Da ich das nicht für bestimmte Unterseiten benötige, sondern eben generell auf meiner Seite gerne so hätte, habe ich in der routing.yml folgendes gemacht:

    PHP-Code:
    remove_trailing_slash:
        
    path: /{url}
        
    defaults:
            
    _controllerRemoveTrailingSlashBundle:Frontend:removeTrailingSlash
            _scope
    frontend
            _token_check
    false
        requirements
    :
            
    url: .*/$
        
    methods: [GET
    Das funktioniert auch soweit bei allen Unterseiten.
    Aber jetzt stoße ich auf ein Problem. Ich habe eine mehrsprachige Seite, welche unter /de/, /fr/, /nl/ läuft. Also z. B. domain.tld/de/ . Außerdem habe ich terminal42/contao-changelanguage installiert (wenn das überhaupt relevant ist).

    Da versucht wird bei Eingabe domain.tld auf /de/ weiterzuleiten, hier aber der trailing slash wieder entfernt wird, wird wieder versucht auf /de/ weiterzuleiten. Das Resultat: too many redirects.
    Kann man das in der routing.yml irgendwie geschickt abfangen?

    Grüße
    Geändert von ttcdummy (28.02.2018 um 11:14 Uhr)

  6. #6
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Ich hab's gefunden:
    https://symfony.com/doc/current/rout...uirements.html

    Lösung:
    PHP-Code:
    remove_trailing_slash:
        
    path: /{_locale}/{url}
        
    defaults:
            
    _controllerRemoveTrailingSlashBundle:Frontend:removeTrailingSlash
            _scope
    frontend
            _token_check
    false
        requirements
    :
            
    url: .*/$
        
    methods: [GET
    Oder gibt's Einwände?

  7. #7
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.477
    User beschenken
    Wunschliste

    Standard

    Dann müsstest du aber auch ein Default für _locale setzen, oder? Oder geht das ohne, weil _locale kein requirement ist? Habs nicht probiert.
    PHP-Code:
    remove_trailing_slash:
        
    path: /{_locale}/{url}
        
    defaults:
            
    _controllerRemoveTrailingSlashBundle:Frontend:removeTrailingSlash
            _scope
    frontend
            _token_check
    false
            _locale
    en
        requirements
    :
            
    url: .*/$
        
    methods: [GET
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  8. #8
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Es funktioniert ohne.

  9. #9
    Contao-Fan Avatar von Grossvater
    Registriert seit
    20.02.2013.
    Beiträge
    509

    Standard

    Wie würde die Weiterleitung aussehen, wenn von / auf non-slash weitergeleitet werden soll? Also unternehmen/ -> unternehmen (ohne slash)?

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.803
    Partner-ID
    10107

    Standard

    Genau das macht ja das Bundle bzw. die config?

  11. #11
    Contao-Fan Avatar von Grossvater
    Registriert seit
    20.02.2013.
    Beiträge
    509

    Standard

    hmm dann habe ich irgendwie etwas falsch gemacht.

    Lege ich dafür eine routes.yml an? oder trage ich es in die config.yml ein?

  12. #12
    Contao-Nutzer
    Registriert seit
    12.11.2012.
    Beiträge
    41

    Standard

    Ich komme hier auch nicht weiter. Ich habe die Managed Edition. Greift hier die routing.yml überhaupt noch oder muss ich das irgendwo anders eintragen. Im Grunde sollen alle Trailing Slash entfernt werden (301 Weiterleitung). In der config.yml steht url_suffix: ''.

  13. #13
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.803
    Partner-ID
    10107

    Standard

    Die routing.yml musst du im Contao Manager Pugin deines Bundles laden lassen.

  14. #14
    Contao-Nutzer
    Registriert seit
    12.11.2012.
    Beiträge
    41

    Standard

    so richtig blick ich da nicht durch

    es gibt ja die
    /vendor/contao/manager-plugin/src/Routing/RoutingPluginInterface.php

    soll dort die routing.yml eingetragen werden, so wie hier angegeben:
    https://packagist.org/packages/contao/manager-plugin

    PHP-Code:
    <?php

    namespace Vendor\SomeBundle\ContaoManager;

    use 
    Contao\ManagerPlugin\Routing\RoutingPluginInterface;
    use 
    Symfony\Component\Config\Loader\LoaderResolverInterface;
    use 
    Symfony\Component\HttpKernel\KernelInterface;
    use 
    Symfony\Component\Routing\RouteCollection;

    class 
    Plugin implements RoutingPluginInterface
    {
        public function 
    getRouteCollection(LoaderResolverInterface $resolverKernelInterface $kernel)
        {
            
    $file '@VendorSomeBundle/Resources/config/routing.yml';

            
    /** @var RouteCollection $collection */
            
    $collection $resolver->resolve($file)->load($file);
            
            return 
    $collection;
        }
    }
    ???

  15. #15
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.803
    Partner-ID
    10107

    Standard

    Siehe zB: https://community.contao.org/de/show...l=1#post440081

    Bei dir sollte es also so lauten:
    PHP-Code:
    <?php

    namespace Vendor\SomeBundle\ContaoManager;

    use 
    Contao\ManagerPlugin\Routing\RoutingPluginInterface;
    use 
    Symfony\Component\Config\Loader\LoaderResolverInterface;
    use 
    Symfony\Component\HttpKernel\KernelInterface;

    class 
    Plugin implements RoutingPluginInterface
    {
        public function 
    getRouteCollection(LoaderResolverInterface $resolverKernelInterface $kernel)
        {
            return 
    $resolver
                
    ->resolve(__DIR__.'/../Resources/config/routing.yml')
                ->
    load(__DIR__.'/../Resources/config/routing.yml')
        }
    }

  16. #16
    Contao-Nutzer
    Registriert seit
    12.11.2012.
    Beiträge
    41

    Standard

    nein, bei mir sieht die Datei vendor/contao/manager-plugin/src/Routing/RoutingPluginInterface.php so aus:

    PHP-Code:
    <?php

    /*
     * This file is part of Contao.
     *
     * Copyright (c) 2005-2017 Leo Feyer
     *
     * @license LGPL-3.0+
     */

    namespace Contao\ManagerPlugin\Routing;

    use 
    Symfony\Component\Config\Loader\LoaderResolverInterface;
    use 
    Symfony\Component\HttpKernel\KernelInterface;
    use 
    Symfony\Component\Routing\RouteCollection;

    interface 
    RoutingPluginInterface
    {
        
    /**
         * Returns a collection of routes for this bundle.
         *
         * @param LoaderResolverInterface $resolver
         * @param KernelInterface         $kernel
         *
         * @return RouteCollection|null
         */
        
    public function getRouteCollection(LoaderResolverInterface $resolverKernelInterface $kernel);
    }
    Ist das überhaupt die richtige Datei um die gewünschten Änderungenvorzunehmen?

    Trailing Slash entfernen und 301 Redirect ?

  17. #17
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.803
    Partner-ID
    10107

    Standard

    Diese Datei sollst du nicht ändern - du brauchst für dein Bundle ein eigenes Contao Manager Plugin.

  18. #18
    Contao-Nutzer
    Registriert seit
    12.11.2012.
    Beiträge
    41

    Standard Trailing-Slash entfernen

    ok, das übersteigt meine Skills

    Wir lösen das Problem nun über 301 redirects in der .htaccess. Hier muss man nur aufpassen, falls man Ordner-URLs aktiviert hat. Dort werden dann womöglich auch die Slash dazwischen entfernt.

  19. #19
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.803
    Partner-ID
    10107

    Standard

    Trailing Slash entfernen über .htaccess sollte eigentlich ganz einfach sein:
    Code:
    RewriteRule (.+)/$ /$1 [L,R=301]

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •