Skip to content

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

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 10, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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);
}
}
Original file line number Diff line number Diff line change
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());
}
}