[FrameworkBundle] TemplateController should accept extra arguments to be sent to the template
This commit is contained in:
parent
20bf17f6ad
commit
e27b417817
@ -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
|
||||
-----
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user