Contao-Camp 2024
Ergebnis 1 bis 6 von 6

Thema: 4.13 Backend Route Doku mit Fehler

  1. #1
    Contao-Nutzer
    Registriert seit
    14.08.2012.
    Beiträge
    71

    Standard 4.13 Backend Route Doku mit Fehler

    Hallo,
    ich versuche einen neuen Navigationspunkt im Backend zu implementieren und folge der Doku:https://docs.contao.org/dev/guides/back-end-routes/
    Ich habe die Dateien eins zu eins übernommen und erhalte folgenden Fehler:
    The controller for URI "/contao/my-backend-route" is not callable: Controller "App\Controller\BackendController" cannot be fetched from the container because it is private. Did you forget to tag the service with "controller.service_arguments"?

    Code:
    <?php
    // src/Controller/BackendController.php
    namespace App\Controller;
    
    use Symfony\Component\Routing\Annotation\Route;
    use Symfony\Component\HttpFoundation\Response;
    use Twig\Environment as TwigEnvironment;
    
    /**
     * @Route("contao/my-backend-route",
     *     name=BackendController::class,
     *     defaults={"_scope": "backend"}
     * )
     */
    class BackendController
    {
        private $twig;
        
        public function __construct(TwigEnvironment $twig)
        {
            $this->twig = $twig;
        }
    
        public function __invoke(): Response
        {
            return new Response($this->twig->render(
                'my_backend_route.html.twig', 
                []
            ));
        }
    }
    Code:
    <?php 
    // src/EventListener/BackendMenuListener.php
    namespace App\EventListener;
    
    use App\Controller\BackendController;
    use Contao\CoreBundle\Event\MenuEvent;
    use Symfony\Component\HttpFoundation\RequestStack;
    use Symfony\Component\Routing\RouterInterface;
    use Terminal42\ServiceAnnotationBundle\Annotation\ServiceTag;
    
    /**
     * @ServiceTag("kernel.event_listener", event="contao.backend_menu_build", priority=-255)
     */
    class BackendMenuListener
    {
        protected $router;
        protected $requestStack;
    
        public function __construct(RouterInterface $router, RequestStack $requestStack)
        {
            $this->router = $router;
            $this->requestStack = $requestStack;
        }
    
        public function __invoke(MenuEvent $event): void
        {
            $factory = $event->getFactory();
            $tree = $event->getTree();
    
            if ('mainMenu' !== $tree->getName()) {
                return;
            }
    
            $contentNode = $tree->getChild('content');
    
            $node = $factory
                ->createItem('my-module')
                    ->setUri($this->router->generate(BackendController::class))
                    ->setLabel('My Modules')
                    ->setLinkAttribute('title', 'Title')
                    ->setLinkAttribute('class', 'my-module')
                    ->setCurrent($this->requestStack->getCurrentRequest()->get('_controller') === BackendController::class)
            ;
    
            $contentNode->addChild($node);
        }
    }
    Code:
    # config/routes.yaml
    app.controller:
        resource: ../src/Controller
        type: annotation

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

    Standard

    Poste deine services.yaml
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Nutzer
    Registriert seit
    14.08.2012.
    Beiträge
    71

    Standard

    Die habe ich gar nicht angelegt. Steht ja nichts in der Doku zu. Wie müsste die denn aussehen? Muss man die zwingend anlegen?

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

    Standard

    Für Controller schon, da, wie die Fehlermeldung schon sagt, der Controller als Service bspw. mit controller.service_arguments getagged werden muss (alternativ dazu auch einfach public: true).
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Nutzer
    Registriert seit
    14.08.2012.
    Beiträge
    71

    Standard

    ich habe jetzt mal diese service.ymal genommen:
    Code:
    # config/services.yaml
    services:
        _defaults:
            autowire: true
            autoconfigure: true
            public: false
    
        App\:
            resource: ../src
            exclude: ../src/{Entity,Migrations,Model,Resources,Tests,Widget}
        
        App\Controller\:
            resource: ../src/Controller
            public: true
    Die Fehlermeldung ist die gleiche

  6. #6
    Contao-Nutzer
    Registriert seit
    14.08.2012.
    Beiträge
    71

    Standard

    Jetzt hat es geklappt. Habe dazu noch ein Composer Update ausgeführt. Danke dir.

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
  •