Fehlermeldung bei Registrierung eines ContentElements über serivces.yaml
Ich versuche aktuell leider vergeblich ein ContentElement über die services.yaml zu registrieren.
Die letzten Male hatte ich das immer über die Annotations bzw. Attribute gemacht, so wie in der Dokumentation beschrieben. https://docs.contao.org/dev/framework/content-elements/
Nun musste ich ein paar Einträge in meiner services.yaml vornehmen, um "%kernel.project_dir%" an den Constructor einer Klasse zu übergeben. In Folge dessen wurde die Klasse, die ich bisher über das Attribut registriert hatte, nicht mehr registriert. Da ich alles gerne einheitlich hätte, hatte ich überlegt, nun alles sauber über die services.yaml zu registrieren.
Selbst in einer frischen Contao 5.3 Installation erhalte ich jedoch eine Fehlermeldung, wenn ich das ContentElement per services.yaml registrieren möchte.
PHP-Code:
// src/Controller/ContentElement/ExampleElementController.php
namespace App\Controller\ContentElement;
use Contao\CoreBundle\Controller\ContentElement\AbstractContentElementController;
use Contao\CoreBundle\DependencyInjection\Attribute\AsContentElement;
use Contao\ContentModel;
use Contao\Template;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
#[AsContentElement(category: 'texts')]
class ExampleElementController extends AbstractContentElementController
{
protected function getResponse(Template $template, ContentModel $model, Request $request): Response
{
return $template->getResponse();
}
}
Code:
# config/services.yaml
services:
App\Controller\ContentElement\ExampleElementController:
tags:
-
name: contao.content_element
category: texts
Rufe ich nun "php vendor/bin/contao-console cache:clear" oder "composer install" in der Konsole auf, erhalte ich folgende Fehlermeldung.
Code:
In CheckExceptionOnInvalidReferenceBehaviorPass.php line 119:
The service "contao.fragment._contao.content_element.example_element" has a dependency on a non-existent service "Psr\Container\ContainerInterface".
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für den Hinweis. Ich war erst über die Attribute gegangen und hatte sie dann entfernt, um über die services.yaml zu gehen. Nur leider funktionierte die Registrierung über die Attribute nicht mehr, nachdem ich Einträge in der services.yaml vorgenommen hatte. Die Klassen mussten ab da alle in der services.yaml definiert werden. Dank #[Autowire('%kernel.project_dir%')] kann ich das jetzt alles ohne die services.yaml machen. Von daher komme ich so erst Mal wunderbar zurecht.
Mit dem Beispiel aus der Dokumentation bekomme ich aber trotzdem die Fehlermeldung.
Anhang 27734
Code:
In CheckExceptionOnInvalidReferenceBehaviorPass.php line 119:
The service "contao.fragment._contao.content_element.example_element" has a dependency on a non-existent service "Psr\Container\ContainerInterface".
Füge ich hier zusätzlich den Psr\Container\ContainerInterface in die services.yaml ein, funktioniert es.
Code:
services:
Psr\Container\ContainerInterface: '@service_container'
App\Controller\ContentElement\ExampleElementController:
tags:
-
name: contao.content_element
category: texts
Hier müssten Doku bzw. Code ggf. noch Mal angepasst werden.