[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 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()`
|
* Added flex-compatible default implementations for `MicroKernelTrait::registerBundles()` and `getProjectDir()`
|
||||||
* Deprecated passing a `RouteCollectionBuiler` to `MicroKernelTrait::configureRoutes()`, type-hint `RoutingConfigurator` instead
|
* Deprecated passing a `RouteCollectionBuiler` to `MicroKernelTrait::configureRoutes()`, type-hint `RoutingConfigurator` instead
|
||||||
|
* The `TemplateController` now accepts context argument
|
||||||
|
|
||||||
5.0.0
|
5.0.0
|
||||||
-----
|
-----
|
||||||
|
@ -33,18 +33,19 @@ class TemplateController
|
|||||||
/**
|
/**
|
||||||
* Renders a template.
|
* Renders a template.
|
||||||
*
|
*
|
||||||
* @param string $template The template name
|
* @param string $template The template name
|
||||||
* @param int|null $maxAge Max age for client caching
|
* @param int|null $maxAge Max age for client caching
|
||||||
* @param int|null $sharedAge Max age for shared (proxy) 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 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) {
|
if (null === $this->twig) {
|
||||||
throw new \LogicException('You can not use the TemplateController if the Twig Bundle is not available.');
|
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) {
|
if ($maxAge) {
|
||||||
$response->setMaxAge($maxAge);
|
$response->setMaxAge($maxAge);
|
||||||
@ -63,8 +64,8 @@ class TemplateController
|
|||||||
return $response;
|
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\Controller\TemplateController;
|
||||||
use Symfony\Bundle\FrameworkBundle\Tests\TestCase;
|
use Symfony\Bundle\FrameworkBundle\Tests\TestCase;
|
||||||
|
use Twig\Environment;
|
||||||
|
use Twig\Loader\ArrayLoader;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Kévin Dunglas <dunglas@gmail.com>
|
* @author Kévin Dunglas <dunglas@gmail.com>
|
||||||
@ -39,4 +41,22 @@ class TemplateControllerTest extends TestCase
|
|||||||
$controller->templateAction('mytemplate')->getContent();
|
$controller->templateAction('mytemplate')->getContent();
|
||||||
$controller('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