Hallo Contao-Community,
nachdem ich mich nun mit dem registrieren von Hooks in Contao 4.4 vertraut gemacht habe und mir dazu hier auch sehr schnell geholfen werden konnte, wende ich mich hier nochmal ganz zuversichtlich an euch.
Hierzu habe ich bereits diesen Thread mitverfolgt, welcher aber noch keinen Erfolg brachte: https://community.contao.org/de/show...S-registrieren
Ausgangssituation ist folgende:
Ich habe ein eigenes Bundle verfasst und dieses auch erfolgreich laden lassen. Soweit so gut.
Der Aufbau ist folgender:
contao49\bundles\fnjs\test-bundle\src\EventListener\GeneratePageListener.php
- contao49 ist dabei das Root-Verzeichnis meiner Contao-Installation.
- bundles ist der ursprüngliche src/ - Ordner aus Contao 4.4.
In meiner composer.json habe ich einen autload konfiguriert:
composer.json
PHP-Code:
{
"name": "contao/managed-edition",
"type": "project",
..
..
..
"minimum-stability": "dev",
"prefer-stable": true,
"repositories": [
{
"type": "path",
"url": "bundles/fnjs/test-bundle"
}
],
"autoload": {
"psr-4": {
"App\\": "bundles/"
}
}
}
Ich habe in meinem Bundle eine listener.yml erstellt und dort folgendes eingetragen (https://github.com/contao/contao/issues/1449):
bundles/fnjs/test-bundle/src/Resources/config/listener.yml:
Code:
services:
fnjs\testBundle\EventListener:
tags: ['terminal42_service_annotation']
Diese listener.yml habe ich hier auch laden lassen:
bundles/fnjs/test-bundle/src/DependencyInjection/testBundleExtension.php
PHP-Code:
namespace fnjs\testBundle\DependencyInjection;
class testBundleExtension extends Extension
{
/**
* {@inheritdoc}
*/
public function load(array $mergedConfig, ContainerBuilder $container)
{
$loader = new YamlFileLoader(
$container,
new FileLocator(__DIR__ . '/../Resources/config')
);
$loader->load('services.yml');
$loader->load('listener.yml');
}
}
Die Hook habe ich einfach aus der Contao-Dokumentation übernommen:
PHP-Code:
<?php
// src/EventListener/GeneratePageListener.php
namespace fnjs\testBundle\EventListener;
use Contao\CoreBundle\ServiceAnnotation\Hook;
use Contao\PageRegular;
use Contao\LayoutModel;
use Contao\PageModel;
use Terminal42\ServiceAnnotationBundle\ServiceAnnotationInterface;
class GeneratePageListener implements ServiceAnnotationInterface
{
/**
* @Hook("generatePage")
*/
public function onGeneratePage(PageModel $pageModel, LayoutModel $layout, PageRegular $pageRegular): void
{
print_r($pageModel->loadDetails());
}
}
Über den ursprünglichen Weg (das Registrieren der Hook über eine config.php) bekomme ich die Hook zum Laufen.
Ich würde jedoch gerne den Weg mit den Annotations nachvollziehen und nutzen können, da er mir deutlich angenehmer und eleganter erscheint.
PS. Ich weiß, dass ich im Bezug auf die Namespaces und Benennung hier noch ein paar "Fehler" hinsichtlich der Symfony-Konventionen habe. Diese werde ich natürlich ausbessern.
Über etwas Unterstützung dabei würde ich mich sehr freuen und bedanke mich schon mal im Vorraus
Lesezeichen