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
Lesezeichen