Skip to content

Commit

Permalink
Simplify the event registration (see #1125)
Browse files Browse the repository at this point in the history
Description
-----------

See https://symfony.com/blog/new-in-symfony-4-4-simpler-event-listeners

Commits
-------

a31e80b Simplify the event registration
cf8a71a Use an __invoke() method in the MergeHttpHeadersListener class
4a95e51 Specify the method name instead of the event if a listener does not have an __invoke() method
ea53f5a Fix the unit tests
  • Loading branch information
leofeyer committed Dec 23, 2019
1 parent 84eede8 commit e6c7ca3
Show file tree
Hide file tree
Showing 70 changed files with 338 additions and 324 deletions.
2 changes: 1 addition & 1 deletion calendar-bundle/src/EventListener/GeneratePageListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public function __construct(ContaoFramework $framework)
/**
* Adds the feeds to the page header.
*/
public function onGeneratePage(PageModel $pageModel, LayoutModel $layoutModel): void
public function __invoke(PageModel $pageModel, LayoutModel $layoutModel): void
{
$calendarfeeds = StringUtil::deserialize($layoutModel->calendarfeeds);

Expand Down
2 changes: 1 addition & 1 deletion calendar-bundle/src/EventListener/InsertTagsListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public function __construct(ContaoFramework $framework)
/**
* @return string|false
*/
public function onReplaceInsertTags(string $tag, bool $useCache, $cacheValue, array $flags)
public function __invoke(string $tag, bool $useCache, $cacheValue, array $flags)
{
$elements = explode('::', $tag);
$key = strtolower($elements[0]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public function __construct(RequestStack $requestStack, ContaoFramework $framewo
/**
* Adds the front end preview URL to the event.
*/
public function onPreviewUrlConvert(PreviewUrlConvertEvent $event): void
public function __invoke(PreviewUrlConvertEvent $event): void
{
if (!$this->framework->isInitialized()) {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public function __construct(RequestStack $requestStack, ContaoFramework $framewo
*
* @throws \RuntimeException
*/
public function onPreviewUrlCreate(PreviewUrlCreateEvent $event): void
public function __invoke(PreviewUrlCreateEvent $event): void
{
if (!$this->framework->isInitialized() || 'calendar' !== $event->getKey()) {
return;
Expand Down
4 changes: 2 additions & 2 deletions calendar-bundle/src/Resources/config/listener.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ services:
- '@request_stack'
- '@contao.framework'
tags:
- { name: kernel.event_listener, event: contao.preview_url_create, method: onPreviewUrlCreate }
- { name: kernel.event_listener }

contao_calendar.listener.preview_url_convert:
class: Contao\CalendarBundle\EventListener\PreviewUrlConvertListener
arguments:
- '@request_stack'
- '@contao.framework'
tags:
- { name: kernel.event_listener, event: contao.preview_url_convert, method: onPreviewUrlConvert }
- { name: kernel.event_listener }
Original file line number Diff line number Diff line change
Expand Up @@ -121,10 +121,7 @@ public function testRegistersThePreviewUrlCreateListener(): void
$this->assertSame(
[
'kernel.event_listener' => [
[
'event' => 'contao.preview_url_create',
'method' => 'onPreviewUrlCreate',
],
[],
],
],
$definition->getTags()
Expand All @@ -151,10 +148,7 @@ public function testRegistersThePreviewUrlConvertListener(): void
$this->assertSame(
[
'kernel.event_listener' => [
[
'event' => 'contao.preview_url_convert',
'method' => 'onPreviewUrlConvert',
],
[],
],
],
$definition->getTags()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public function testAddsTheCalendarFeedLink(): void
$layoutModel->calendarfeeds = 'a:1:{i:0;i:3;}';

$listener = new GeneratePageListener($this->mockContaoFramework($adapters));
$listener->onGeneratePage($this->createMock(PageModel::class), $layoutModel);
$listener($this->createMock(PageModel::class), $layoutModel);

$this->assertSame(
['<link type="application/rss+xml" rel="alternate" href="http://localhost/share/events.xml" title="Upcoming events">'],
Expand All @@ -66,7 +66,7 @@ public function testDoesNotAddTheCalendarFeedLinkIfThereAreNoFeeds(): void
$layoutModel->calendarfeeds = '';

$listener = new GeneratePageListener($this->mockContaoFramework());
$listener->onGeneratePage($this->createMock(PageModel::class), $layoutModel);
$listener($this->createMock(PageModel::class), $layoutModel);

$this->assertEmpty($GLOBALS['TL_HEAD']);
}
Expand All @@ -84,7 +84,7 @@ public function testDoesNotAddTheCalendarFeedLinkIfThereAreNoModels(): void
$layoutModel->calendarfeeds = 'a:1:{i:0;i:3;}';

$listener = new GeneratePageListener($this->mockContaoFramework($adapters));
$listener->onGeneratePage($this->createMock(PageModel::class), $layoutModel);
$listener($this->createMock(PageModel::class), $layoutModel);

$this->assertEmpty($GLOBALS['TL_HEAD']);
}
Expand Down
20 changes: 10 additions & 10 deletions calendar-bundle/tests/EventListener/InsertTagsListenerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public function testReplacesTheCalendarFeedTag(): void
$framework = $this->mockContaoFramework($adapters);

$listener = new InsertTagsListener($framework);
$url = $listener->onReplaceInsertTags('calendar_feed::2', false, null, []);
$url = $listener('calendar_feed::2', false, null, []);

$this->assertSame('http://localhost/share/events.xml', $url);
}
Expand Down Expand Up @@ -70,40 +70,40 @@ static function (CalendarEventsModel $model, bool $absolute): string {

$this->assertSame(
'<a href="events/the-foobar-event.html" title="The &quot;foobar&quot; event">The "foobar" event</a>',
$listener->onReplaceInsertTags('event::2', false, null, [])
$listener('event::2', false, null, [])
);

$this->assertSame(
'<a href="events/the-foobar-event.html" title="The &quot;foobar&quot; event">',
$listener->onReplaceInsertTags('event_open::2', false, null, [])
$listener('event_open::2', false, null, [])
);

$this->assertSame(
'events/the-foobar-event.html',
$listener->onReplaceInsertTags('event_url::2', false, null, [])
$listener('event_url::2', false, null, [])
);

$this->assertSame(
'http://domain.tld/events/the-foobar-event.html',
$listener->onReplaceInsertTags('event_url::2', false, null, ['absolute'])
$listener('event_url::2', false, null, ['absolute'])
);

$this->assertSame(
'The &quot;foobar&quot; event',
$listener->onReplaceInsertTags('event_title::2', false, null, [])
$listener('event_title::2', false, null, [])
);

$this->assertSame(
'<p>The annual foobar event.</p>',
$listener->onReplaceInsertTags('event_teaser::2', false, null, [])
$listener('event_teaser::2', false, null, [])
);
}

public function testReturnsFalseIfTheTagIsUnknown(): void
{
$listener = new InsertTagsListener($this->mockContaoFramework());

$this->assertFalse($listener->onReplaceInsertTags('link_url::2', false, null, []));
$this->assertFalse($listener('link_url::2', false, null, []));
}

public function testReturnsAnEmptyStringIfThereIsNoModel(): void
Expand All @@ -115,7 +115,7 @@ public function testReturnsAnEmptyStringIfThereIsNoModel(): void

$listener = new InsertTagsListener($this->mockContaoFramework($adapters));

$this->assertSame('', $listener->onReplaceInsertTags('calendar_feed::3', false, null, []));
$this->assertSame('', $listener->onReplaceInsertTags('event_url::3', false, null, []));
$this->assertSame('', $listener('calendar_feed::3', false, null, []));
$this->assertSame('', $listener('event_url::3', false, null, []));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public function testConvertsThePreviewUrl(): void
$event = new PreviewUrlConvertEvent();

$listener = new PreviewUrlConvertListener($requestStack, $framework);
$listener->onPreviewUrlConvert($event);
$listener($event);

$this->assertSame('http://localhost/events/winter-holidays.html', $event->getUrl());
}
Expand All @@ -60,7 +60,7 @@ public function testDoesNotConvertThePreviewUrlIfTheFrameworkIsNotInitialized():
$event = new PreviewUrlConvertEvent();

$listener = new PreviewUrlConvertListener(new RequestStack(), $framework);
$listener->onPreviewUrlConvert($event);
$listener($event);

$this->assertNull($event->getUrl());
}
Expand All @@ -78,7 +78,7 @@ public function testDoesNotConvertThePreviewUrlIfTheCalendarParameterIsNotSet():
$event = new PreviewUrlConvertEvent();

$listener = new PreviewUrlConvertListener($requestStack, $framework);
$listener->onPreviewUrlConvert($event);
$listener($event);

$this->assertNull($event->getUrl());
}
Expand All @@ -101,7 +101,7 @@ public function testDoesNotConvertThePreviewUrlIfThereIsNoEvent(): void
$event = new PreviewUrlConvertEvent();

$listener = new PreviewUrlConvertListener($requestStack, $framework);
$listener->onPreviewUrlConvert($event);
$listener($event);

$this->assertNull($event->getUrl());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public function testCreatesThePreviewUrl(): void
$event = new PreviewUrlCreateEvent('calendar', 1);

$listener = new PreviewUrlCreateListener($requestStack, $framework);
$listener->onPreviewUrlCreate($event);
$listener($event);

$this->assertSame('calendar=1', $event->getQuery());
}
Expand All @@ -56,7 +56,7 @@ public function testDoesNotCreateThePreviewUrlIfTheFrameworkIsNotInitialized():
$event = new PreviewUrlCreateEvent('calendar', 1);

$listener = new PreviewUrlCreateListener(new RequestStack(), $framework);
$listener->onPreviewUrlCreate($event);
$listener($event);

$this->assertNull($event->getQuery());
}
Expand All @@ -67,7 +67,7 @@ public function testDoesNotCreateThePreviewUrlIfTheCalendarParameterIsNotSet():
$event = new PreviewUrlCreateEvent('news', 1);

$listener = new PreviewUrlCreateListener(new RequestStack(), $framework);
$listener->onPreviewUrlCreate($event);
$listener($event);

$this->assertNull($event->getQuery());
}
Expand All @@ -84,7 +84,7 @@ public function testDoesNotCreateThePreviewUrlOnTheCalendarListPage(): void
$event = new PreviewUrlCreateEvent('calendar', 1);

$listener = new PreviewUrlCreateListener($requestStack, $framework);
$listener->onPreviewUrlCreate($event);
$listener($event);

$this->assertNull($event->getQuery());
}
Expand All @@ -111,7 +111,7 @@ public function testOverwritesTheIdIfTheEventSettingsAreEdited(): void
$event = new PreviewUrlCreateEvent('calendar', 2);

$listener = new PreviewUrlCreateListener($requestStack, $framework);
$listener->onPreviewUrlCreate($event);
$listener($event);

$this->assertSame('calendar=2', $event->getQuery());
}
Expand All @@ -129,7 +129,7 @@ public function testDoesNotCreateThePreviewUrlIfThereIsNoEvent(): void
$event = new PreviewUrlCreateEvent('calendar', 0);

$listener = new PreviewUrlCreateListener($requestStack, $framework);
$listener->onPreviewUrlCreate($event);
$listener($event);

$this->assertNull($event->getQuery());
}
Expand Down
19 changes: 19 additions & 0 deletions core-bundle/src/ContaoCoreBundle.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,19 @@
use Contao\CoreBundle\DependencyInjection\Compiler\TranslationDataCollectorPass;
use Contao\CoreBundle\DependencyInjection\ContaoCoreExtension;
use Contao\CoreBundle\DependencyInjection\Security\ContaoLoginFactory;
use Contao\CoreBundle\Event\ContaoCoreEvents;
use Contao\CoreBundle\Event\GenerateSymlinksEvent;
use Contao\CoreBundle\Event\MenuEvent;
use Contao\CoreBundle\Event\PreviewUrlConvertEvent;
use Contao\CoreBundle\Event\PreviewUrlCreateEvent;
use Contao\CoreBundle\Event\RobotsTxtEvent;
use Contao\CoreBundle\Event\SlugValidCharactersEvent;
use Contao\CoreBundle\Fragment\Reference\ContentElementReference;
use Contao\CoreBundle\Fragment\Reference\FrontendModuleReference;
use Symfony\Bundle\SecurityBundle\DependencyInjection\SecurityExtension;
use Symfony\Component\DependencyInjection\Compiler\PassConfig;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\EventDispatcher\DependencyInjection\AddEventAliasesPass;
use Symfony\Component\HttpKernel\Bundle\Bundle;
use Symfony\Component\HttpKernel\DependencyInjection\FragmentRendererPass;

Expand Down Expand Up @@ -60,6 +68,17 @@ public function build(ContainerBuilder $container): void
$extension = $container->getExtension('security');
$extension->addSecurityListenerFactory(new ContaoLoginFactory());

$container->addCompilerPass(
new AddEventAliasesPass([
GenerateSymlinksEvent::class => ContaoCoreEvents::GENERATE_SYMLINKS,
MenuEvent::class => ContaoCoreEvents::BACKEND_MENU_BUILD,
PreviewUrlCreateEvent::class => ContaoCoreEvents::PREVIEW_URL_CREATE,
PreviewUrlConvertEvent::class => ContaoCoreEvents::PREVIEW_URL_CONVERT,
RobotsTxtEvent::class => ContaoCoreEvents::ROBOTS_TXT,
SlugValidCharactersEvent::class => ContaoCoreEvents::SLUG_VALID_CHARACTERS,
])
);

$container->addCompilerPass(new MakeServicesPublicPass());
$container->addCompilerPass(new AddPackagesPass());
$container->addCompilerPass(new AddAssetsPackagesPass());
Expand Down
2 changes: 1 addition & 1 deletion core-bundle/src/EventListener/BackendLocaleListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public function __construct(Security $security, LocaleAwareInterface $translator
/**
* Sets the default locale based on the user language.
*/
public function onKernelRequest(RequestEvent $event): void
public function __invoke(RequestEvent $event): void
{
$user = $this->security->getUser();

Expand Down
2 changes: 1 addition & 1 deletion core-bundle/src/EventListener/BackendMenuListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public function __construct(Security $security, RouterInterface $router)
/**
* Adds the back end user navigation.
*/
public function onBuild(MenuEvent $event): void
public function __invoke(MenuEvent $event): void
{
$user = $this->security->getUser();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public function __construct(TokenChecker $tokenChecker, string $requestAttribute
/**
* Adds the request attribute to the request.
*/
public function onKernelRequest(RequestEvent $event): void
public function __invoke(RequestEvent $event): void
{
if (!$this->tokenChecker->hasBackendUser()) {
return;
Expand Down
2 changes: 1 addition & 1 deletion core-bundle/src/EventListener/ClearSessionDataListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class ClearSessionDataListener
/**
* Clear the Contao session data if not a POST request.
*/
public function onKernelResponse(ResponseEvent $event): void
public function __invoke(ResponseEvent $event): void
{
if (!$event->isMasterRequest()) {
return;
Expand Down
2 changes: 1 addition & 1 deletion core-bundle/src/EventListener/CommandSchedulerListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public function __construct(ContaoFramework $framework, Connection $connection,
/**
* Runs the command scheduler.
*/
public function onKernelTerminate(TerminateEvent $event): void
public function __invoke(TerminateEvent $event): void
{
if (!$this->framework->isInitialized() || !$this->canRunController($event->getRequest())) {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ class ExceptionConverterListener
/**
* Maps known exceptions to HTTP exceptions.
*/
public function onKernelException(ExceptionEvent $event): void
public function __invoke(ExceptionEvent $event): void
{
$exception = $event->getThrowable();
$class = $this->getTargetClass($exception);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class InsecureInstallationListener
*
* @throws InsecureInstallationException
*/
public function onKernelRequest(RequestEvent $event): void
public function __invoke(RequestEvent $event): void
{
$request = $event->getRequest();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class MakeResponsePrivateListener
* Some of this logic is also already implemented in the HttpCache (1, 2 and 3), but we
* want to make sure it works for any reverse proxy without having to configure too much.
*/
public function onKernelResponse(ResponseEvent $event): void
public function __invoke(ResponseEvent $event): void
{
if (!$event->isMasterRequest()) {
return;
Expand Down

0 comments on commit e6c7ca3

Please sign in to comment.