Das Contao Camp 2020 in Hamburg. LEIDER ABGESAGT!
Ergebnis 1 bis 14 von 14

Thema: Back End Routes / Module

  1. #1
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard Back End Routes / Module

    Moin,
    ich bin gerade dabei und möchte ein neues Module im Backend von Contao hinzufügen. Habe hierfür die Dokumentation abgearbeitet (https://docs.contao.org/dev/guides/backend-routes/).
    Jedoch heißt es nun von wegen
    None of the chained routers were able to generate route: Route 'app.backend-route' not found
    Woran kann dies liegen?

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Arbeitest du im Debug-Modus? Wenn nicht, hast du ein composer install gemacht? Wenn doch: poste deinen Code.

  3. #3
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Arbeitest du im Debug-Modus? Wenn nicht, hast du ein composer install gemacht? Wenn doch: poste deinen Code.
    Composer install gemacht. Nichts geändert. Ich arbeite nicht im Debug Modus, weiß nicht wie man in den Debug Mode kommt ohne das Backend.

    src/Controller/BackendController.php
    PHP-Code:
    <?php

    namespace App\Controller;

    use 
    Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use 
    Symfony\Component\Routing\Annotation\Route;
    use 
    Symfony\Component\HttpFoundation\Response;
    use 
    Twig\Environment as TwigEnvironment;

    /**
    * @Route("/contao/my-backend-route",
    *     name=App\Controller\BackendController::class,
    *     defaults={
    *         "_scope" = "backend",
    *         "_token_check" = true,
    *         "_backend_module" = "my-module"
    *     }
    * )
    */
    class BackendController extends AbstractController
    {
    private 
    $twig;

    public function 
    __construct(TwigEnvironment $twig)
    {
    $this->twig $twig;
    }

    public function 
    __invoke()
    {
    return new 
    Response($this->twig->render(
    'my_backend_route.html.twig',
    []
    ));
    }
    }
    config/routing.yml
    Code:
    app.controller:
      resource: '../src/Controller'
      type: annotation
    templates/my_backend_route.html.twig
    Code:
    {% extends "@ContaoCore/Backend/be_page.html.twig" %}
    
    {% block headline %}
        Not only the content of the `title`-tag but also the title of the content section.
    {% endblock %}
    
    {% block error %}
        Will be placed within the error block.
    {% endblock %}
    
    {% block main %}
        <div class="tl_listing_container">
            Main Content.
        </div>
    {% endblock %}

    src/EventListener/BackendMenuListener.php
    PHP-Code:
    <?php
    namespace App\EventListener;

    use 
    Contao\CoreBundle\Event\MenuEvent;
    use 
    Symfony\Component\HttpFoundation\RequestStack;
    use 
    Symfony\Component\Routing\RouterInterface;

    class 
    BackendMenuListener
    {
        protected 
    $router;
        protected 
    $requestStack;

        public function 
    __construct(RouterInterface $routerRequestStack $requestStack)
        {
            
    $this->router $router;
            
    $this->requestStack $requestStack;
        }

        public function 
    onBuild(MenuEvent $event): void
        
    {
            
    $factory $event->getFactory();
            
    $tree $event->getTree();

            if (
    'mainMenu' !== $tree->getName()) {
                return;
            }

            
    $contentNode $tree->getChild('content');

            
    $node $factory
                
    ->createItem('my-modules')
                ->
    setUri($this->router->generate('app.backend-route'))
                ->
    setLabel('My Modules')
                ->
    setLinkAttribute('title''Title')
                ->
    setLinkAttribute('class''my-modules')
                ->
    setCurrent($this->requestStack->getCurrentRequest()->get('_backend_module') === 'my-modules');

            
    $contentNode->addChild($node);
        }
    }
    config/services.yml
    Code:
    services:
      App\EventListener\BackendMenuListener:
        arguments:
          - "@router"
          - "@request_stack"
        tags:
          - { name: kernel.event_listener, event: contao.backend_menu_build, method: onBuild, priority: -255 }

    Verzeichnis.PNG

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Da war noch ein Fehler in der Dokumentation. Ist nun behoben: https://github.com/contao/docs/commi...229055c9add2d8


    Zitat Zitat von JLN Beitrag anzeigen
    Ich arbeite nicht im Debug Modus, weiß nicht wie man in den Debug Mode kommt ohne das Backend.
    Über den Contao Manager oder, wenn du Lokal arbeitest, über die .env bzw. .env.local
    Siehe https://docs.contao.org/manual/de/sy...4-8-und-hoeher

  5. #5
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Da war noch ein Fehler in der Dokumentation. Ist nun behoben: https://github.com/contao/docs/commi...229055c9add2d8


    Über den Contao Manager oder, wenn du Lokal arbeitest, über die .env bzw. .env.local
    Siehe https://docs.contao.org/manual/de/sy...4-8-und-hoeher
    Ok das hat soweit funktioniert, jedoch sobald ich nun das Module auswähle in dem Menü:
    Code:
    The controller for URI "/contao/my-backend-route" is not callable. Controller "App\Controller\BackendController" has required constructor arguments and does not exist in the container. Did you forget to define the controller as a service?

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Hm, einen Fehler habe ich noch in der Doku gefunden: https://github.com/contao/docs/commi...3973bdd641406b
    Hat aber nichts mit deinem Fehler zu tun.

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Ändere deine services.yml mal auf folgendes:
    Code:
    services:
        _defaults:
            autowire: true
            autoconfigure: true
            public: false
    
        App\:
            resource: ../src
            exclude: ../src/{Entity,Migrations,Resources,Model,Tests}
        
        App\Controller\:
            resource: ../src/Controller
            public: true
    
        App\EventListener\BackendMenuListener:
            tags:
                - { name: kernel.event_listener, event: contao.backend_menu_build, method: onBuild, priority: -255 }

  8. #8
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ändere deine services.yml mal auf folgendes:
    Code:
    services:
        _defaults:
            autowire: true
            autoconfigure: true
            public: false
    
        App\:
            resource: ../src
            exclude: ../src/{Entity,Migrations,Resources,Model,Tests}
        
        App\Controller\:
            resource: ../src/Controller
            public: true
    
        App\EventListener\BackendMenuListener:
            tags:
                - { name: kernel.event_listener, event: contao.backend_menu_build, method: onBuild, priority: -255 }

    Das Problem wurde behoben, jedoch wird das neue Module nicht als "active" angezeigt in der Navigationsleiste.

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

  10. #10
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Perfekt, danke vielmals!

    Im $GLOBALS['BE_MOD']-Array befindet sich nun jedoch nicht mein neuer Menüeintrag. Wie füg ich den hinzu bzw. ist es überhaupt notwendig/relevant?

    Wenn ich nun eine komplett neue Kategorie erstellen möchte, müsste ich lediglich den 'BE_MOD'-Array erweitern, richtig?
    Code:
    $GLOBALS['BE_MOD']['new-category']
    Und dann bei BackendMenuListener folgendes:
    Code:
    $contentNode = $tree->getChild('new-cateogry');

  11. #11
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Das sollte nicht notwendig sein. Du solltest in der Lage sein den Tree dort entsprechend zu ändern.

  12. #12
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Das sollte nicht notwendig sein. Du solltest in der Lage sein den Tree dort entsprechend zu ändern.
    Wo meinst du genau, dass ich den Tree ändern kann?

    Und wie kann ich mein Template ein Stylesheet zuweisen? (Wollte Bootstrap implementieren). Mein Template "extends" aktuell von der be_page.html.twig, jedoch befindet sich dort kein Block für die Stylesheets/JS.

    Grüße

  13. #13
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Stylesheets kannst du mit
    PHP-Code:
    $GLOBALS['TL_CSS'][] = '…'
    in deinem Controller hinzufügen lassen.

  14. #14
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Stylesheets kannst du mit
    PHP-Code:
    $GLOBALS['TL_CSS'][] = '…'
    in deinem Controller hinzufügen lassen.
    Ich möchte meinem neuen BE-Module nun ein neues Model zuweisen. Hab die Dokumentation dazu verfolgt und das Model auch in der DCA registriert.
    Muss ich die DB-Tabelle jetzt noch von Hand anlegen?

    Grüße
    Geändert von JLN (17.03.2020 um 14:33 Uhr)

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
  •