Skip to content

Commit

Permalink
[FrameworkBundle] TemplateController should accept extra arguments to…
Browse files Browse the repository at this point in the history
… be sent to the template
  • Loading branch information
Benjamin RICHARD authored and fabpot committed Jan 10, 2020
1 parent 20bf17f commit e27b417
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 8 deletions.
1 change: 1 addition & 0 deletions src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md
Expand Up @@ -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
-----
Expand Down
Expand Up @@ -33,18 +33,19 @@ public function __construct(Environment $twig = null)
/**
* 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);
Expand All @@ -63,8 +64,8 @@ public function templateAction(string $template, int $maxAge = null, int $shared
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);
}
}
Expand Up @@ -13,6 +13,8 @@

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>
Expand All @@ -39,4 +41,22 @@ public function testNoTwig()
$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());
}
}

0 comments on commit e27b417

Please sign in to comment.