Skip to content

Commit

Permalink
Set twig globals after first admin instanciation
Browse files Browse the repository at this point in the history
Fixes #8120
  • Loading branch information
Antoine Roué committed Nov 19, 2023
1 parent 724c4fc commit 1535f24
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 92 deletions.
19 changes: 19 additions & 0 deletions src/Controller/CRUDController.php
Original file line number Diff line number Diff line change
Expand Up @@ -989,6 +989,25 @@ final public function configureAdmin(Request $request): void
$this->templateRegistry = $this->admin->getTemplateRegistry();
}

/**
* Add twig globals which are used in every template.
*/
final public function setTwigGlobals(Request $request): void
{
$twig = $this->container->get('twig');
\assert($twig instanceof Environment);

$twig->addGlobal('admin', $this->admin);

if ($this->isXmlHttpRequest($request)) {
$baseTemplate = $this->templateRegistry->getTemplate('ajax');
} else {
$baseTemplate = $this->templateRegistry->getTemplate('layout');
}

$twig->addGlobal('base_template', $baseTemplate);
}

/**
* Renders a view while passing mandatory parameters on to the template.
*
Expand Down
83 changes: 0 additions & 83 deletions src/EventListener/AdminEventListener.php

This file was deleted.

2 changes: 2 additions & 0 deletions src/EventListener/ConfigureCRUDControllerListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ public function onKernelController(ControllerEvent $event): void
$request = $event->getRequest();

$controller->configureAdmin($request);

$controller->setTwigGlobals($request);
}

public static function getSubscribedEvents(): array
Expand Down
8 changes: 0 additions & 8 deletions src/Resources/config/event_listener.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,11 @@

namespace Symfony\Component\DependencyInjection\Loader\Configurator;

use Sonata\AdminBundle\EventListener\AdminEventListener;
use Sonata\AdminBundle\EventListener\ConfigureCRUDControllerListener;

return static function (ContainerConfigurator $containerConfigurator): void {
$containerConfigurator->services()

->set('sonata.admin.event_listener.admin_event', AdminEventListener::class)
->tag('kernel.event_subscriber')
->args([
new ReferenceConfigurator('twig'),
new ReferenceConfigurator('sonata.admin.request.fetcher'),
])

->set('sonata.admin.event_listener.configure_crud_controller', ConfigureCRUDControllerListener::class)
->tag('kernel.event_subscriber');
};
29 changes: 28 additions & 1 deletion tests/Controller/CRUDControllerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,11 @@
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Normalizer\ConstraintViolationListNormalizer;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Validator\Constraints\Uuid;
use Symfony\Component\Validator\ConstraintViolation;
use Symfony\Component\Validator\Constraints\Uuid;
use Symfony\Contracts\Translation\TranslatorInterface;
use Twig\Environment;
use Twig\Loader\ArrayLoader;

/**
* @author Andrej Hudec <pulzarraider@gmail.com>
Expand Down Expand Up @@ -383,6 +384,32 @@ public function testConfigureAdminWithoutTemplateRegistryThrowsException(): void
$controller->configureAdmin($this->request);
}

public function testSetTwigGlobals(): void
{
$twig = new Environment(new ArrayLoader([]));
$this->container->set('twig', $twig);

$this->controller->setTwigGlobals($this->request);

$globals = $twig->getGlobals();
static::assertSame($this->admin, $globals['admin']);
static::assertSame('@SonataAdmin/standard_layout.html.twig', $globals['base_template']);
}

public function testSetTwigGlobalsWithAjaxRequest(): void
{
$this->request->request->set('_xml_http_request', true);

$twig = new Environment(new ArrayLoader([]));
$this->container->set('twig', $twig);

$this->controller->setTwigGlobals($this->request);

$globals = $twig->getGlobals();
static::assertSame($this->admin, $globals['admin']);
static::assertSame('@SonataAdmin/ajax_layout.html.twig', $globals['base_template']);
}

public function testGetBaseTemplate(): void
{
static::assertSame(
Expand Down

0 comments on commit 1535f24

Please sign in to comment.