Commit f9951f4d authored by Fabien Potencier's avatar Fabien Potencier

bug #1604 Fix Twig provider on Symfony 3.4 (fabpot)

This PR was merged into the 2.2.x-dev branch.

Discussion
----------

Fix Twig provider on Symfony 3.4

replaces #1571, closes #1579

Commits
-------

7e12bbd5 fixed Twig provider on Symfony 3.4
parents b0a2d143 7e12bbd5
...@@ -27,6 +27,8 @@ use Symfony\Bridge\Twig\Extension\WebLinkExtension; ...@@ -27,6 +27,8 @@ use Symfony\Bridge\Twig\Extension\WebLinkExtension;
use Symfony\Bridge\Twig\Form\TwigRendererEngine; use Symfony\Bridge\Twig\Form\TwigRendererEngine;
use Symfony\Bridge\Twig\Form\TwigRenderer; use Symfony\Bridge\Twig\Form\TwigRenderer;
use Symfony\Bridge\Twig\Extension\HttpKernelRuntime; use Symfony\Bridge\Twig\Extension\HttpKernelRuntime;
use Symfony\Component\Form\FormRenderer;
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\WebLink\HttpHeaderSerializer; use Symfony\Component\WebLink\HttpHeaderSerializer;
/** /**
...@@ -126,7 +128,11 @@ class TwigServiceProvider implements ServiceProviderInterface ...@@ -126,7 +128,11 @@ class TwigServiceProvider implements ServiceProviderInterface
$app['twig.form.renderer'] = function ($app) { $app['twig.form.renderer'] = function ($app) {
$csrfTokenManager = isset($app['csrf.token_manager']) ? $app['csrf.token_manager'] : null; $csrfTokenManager = isset($app['csrf.token_manager']) ? $app['csrf.token_manager'] : null;
if (Kernel::VERSION_ID < 30400) {
return new TwigRenderer($app['twig.form.engine'], $csrfTokenManager); return new TwigRenderer($app['twig.form.engine'], $csrfTokenManager);
}
return new FormRenderer($app['twig.form.engine'], $csrfTokenManager);
}; };
$twig->addExtension(new FormExtension(class_exists(HttpKernelRuntime::class) ? null : $app['twig.form.renderer'])); $twig->addExtension(new FormExtension(class_exists(HttpKernelRuntime::class) ? null : $app['twig.form.renderer']));
...@@ -186,10 +192,17 @@ class TwigServiceProvider implements ServiceProviderInterface ...@@ -186,10 +192,17 @@ class TwigServiceProvider implements ServiceProviderInterface
}; };
$app['twig.runtimes'] = function ($app) { $app['twig.runtimes'] = function ($app) {
return [ $runtimes = [
HttpKernelRuntime::class => 'twig.runtime.httpkernel', HttpKernelRuntime::class => 'twig.runtime.httpkernel',
TwigRenderer::class => 'twig.form.renderer',
]; ];
if (Kernel::VERSION_ID < 30400) {
$runtimes[TwigRenderer::class] = 'twig.form.renderer';
} else {
$runtimes[FormRenderer::class] = 'twig.form.renderer';
}
return $runtimes;
}; };
$app['twig.runtime_loader'] = function ($app) { $app['twig.runtime_loader'] = function ($app) {
......
...@@ -20,6 +20,7 @@ use Silex\Provider\TwigServiceProvider; ...@@ -20,6 +20,7 @@ use Silex\Provider\TwigServiceProvider;
use Silex\Provider\AssetServiceProvider; use Silex\Provider\AssetServiceProvider;
use Symfony\Bridge\Twig\Extension\WebLinkExtension; use Symfony\Bridge\Twig\Extension\WebLinkExtension;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\WebLink\HttpHeaderSerializer; use Symfony\Component\WebLink\HttpHeaderSerializer;
/** /**
...@@ -109,9 +110,13 @@ class TwigServiceProviderTest extends TestCase ...@@ -109,9 +110,13 @@ class TwigServiceProviderTest extends TestCase
$app->register(new CsrfServiceProvider()); $app->register(new CsrfServiceProvider());
$app->register(new TwigServiceProvider()); $app->register(new TwigServiceProvider());
$this->assertInstanceOf('Twig_Environment', $app['twig'], 'Service twig is created successful.'); $this->assertInstanceOf('Twig_Environment', $app['twig']);
$this->assertInstanceOf('Symfony\Bridge\Twig\Form\TwigRendererEngine', $app['twig.form.engine'], 'Service twig.form.engine is created successful.'); $this->assertInstanceOf('Symfony\Bridge\Twig\Form\TwigRendererEngine', $app['twig.form.engine']);
$this->assertInstanceOf('Symfony\Bridge\Twig\Form\TwigRenderer', $app['twig.form.renderer'], 'Service twig.form.renderer is created successful.'); if (Kernel::VERSION_ID < 30400) {
$this->assertInstanceOf('Symfony\Bridge\Twig\Form\TwigRenderer', $app['twig.form.renderer']);
} else {
$this->assertInstanceOf('Symfony\Component\Form\FormRenderer', $app['twig.form.renderer']);
}
} }
public function testFormWithoutCsrf() public function testFormWithoutCsrf()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment