[FrameworkBundle] TemplateController should accept extra arguments to be sent to the template

This commit is contained in:
Benjamin RICHARD 2020-01-08 11:51:46 +01:00 committed by Fabien Potencier
parent 20bf17f6ad
commit e27b417817
3 changed files with 30 additions and 8 deletions

View File

@ -8,6 +8,7 @@ CHANGELOG
* Added a new `mailer.message_bus` option to configure or disable the message bus to use to send mails.
* Added flex-compatible default implementations for `MicroKernelTrait::registerBundles()` and `getProjectDir()`
* Deprecated passing a `RouteCollectionBuiler` to `MicroKernelTrait::configureRoutes()`, type-hint `RoutingConfigurator` instead
* The `TemplateController` now accepts context argument
5.0.0
-----

View File

@ -33,18 +33,19 @@ class TemplateController
/**
* Renders a template.
*
* @param string $template The template name
* @param int|null $maxAge Max age for client caching
* @param int|null $sharedAge Max age for shared (proxy) caching
* @param bool|null $private Whether or not caching should apply for client caches only
* @param string $template The template name
* @param int|null $maxAge Max age for client caching
* @param int|null $sharedAge Max age for shared (proxy) caching
* @param bool|null $private Whether or not caching should apply for client caches only
* @param array $context The context (arguments) of the template
*/
public function templateAction(string $template, int $maxAge = null, int $sharedAge = null, bool $private = null): Response
public function templateAction(string $template, int $maxAge = null, int $sharedAge = null, bool $private = null, array $context = []): Response
{
if (null === $this->twig) {
throw new \LogicException('You can not use the TemplateController if the Twig Bundle is not available.');
}
$response = new Response($this->twig->render($template));
$response = new Response($this->twig->render($template, $context));
if ($maxAge) {
$response->setMaxAge($maxAge);
@ -63,8 +64,8 @@ class TemplateController
return $response;
}
public function __invoke(string $template, int $maxAge = null, int $sharedAge = null, bool $private = null): Response
public function __invoke(string $template, int $maxAge = null, int $sharedAge = null, bool $private = null, array $context = []): Response
{
return $this->templateAction($template, $maxAge, $sharedAge, $private);
return $this->templateAction($template, $maxAge, $sharedAge, $private, $context);
}
}

View File

@ -13,6 +13,8 @@ namespace Symfony\Bundle\FrameworkBundle\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\TemplateController;
use Symfony\Bundle\FrameworkBundle\Tests\TestCase;
use Twig\Environment;
use Twig\Loader\ArrayLoader;
/**
* @author Kévin Dunglas <dunglas@gmail.com>
@ -39,4 +41,22 @@ class TemplateControllerTest extends TestCase
$controller->templateAction('mytemplate')->getContent();
$controller('mytemplate')->getContent();
}
public function testContext()
{
$templateName = 'template_controller.html.twig';
$context = [
'param' => 'hello world',
];
$expected = '<h1>'.$context['param'].'</h1>';
$loader = new ArrayLoader();
$loader->setTemplate($templateName, '<h1>{{param}}</h1>');
$twig = new Environment($loader);
$controller = new TemplateController($twig);
$this->assertEquals($expected, $controller->templateAction($templateName, null, null, null, $context)->getContent());
$this->assertEquals($expected, $controller($templateName, null, null, null, $context)->getContent());
}
}