mirror of
https://github.com/twigphp/Twig.git
synced 2026-09-10 01:16:52 +00:00
Fix BC break on escaper extension
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
# 3.10.1 (2024-XX-XX)
|
||||
|
||||
* Fix BC break on escaper extension
|
||||
* Fix constant return type
|
||||
|
||||
# 3.10.0 (2024-05-11)
|
||||
|
||||
+3
-1
@@ -135,7 +135,9 @@ class Environment
|
||||
]);
|
||||
|
||||
$this->addExtension(new CoreExtension());
|
||||
$this->addExtension(new EscaperExtension($options['autoescape']));
|
||||
$escaperExt = new EscaperExtension($options['autoescape']);
|
||||
$escaperExt->setEnvironment($this, false);
|
||||
$this->addExtension($escaperExt);
|
||||
if (\PHP_VERSION_ID >= 80000) {
|
||||
$this->addExtension(new YieldNotReadyExtension($this->useYield));
|
||||
}
|
||||
|
||||
@@ -59,11 +59,14 @@ final class EscaperExtension extends AbstractExtension
|
||||
/**
|
||||
* @deprecated since Twig 3.10
|
||||
*/
|
||||
public function setEnvironment(Environment $environment): void
|
||||
public function setEnvironment(Environment $environment, bool $triggerDeprecation = true): void
|
||||
{
|
||||
trigger_deprecation('twig/twig', '3.10', 'The "%s()" method is deprecated and not needed if you are using methods from "Twig\Runtime\EscaperRuntime".', __METHOD__);
|
||||
if ($triggerDeprecation) {
|
||||
trigger_deprecation('twig/twig', '3.10', 'The "%s()" method is deprecated and not needed if you are using methods from "Twig\Runtime\EscaperRuntime".', __METHOD__);
|
||||
}
|
||||
|
||||
$this->environment = $environment;
|
||||
$this->escaper = $environment->getRuntime(EscaperRuntime::class);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -126,9 +129,6 @@ final class EscaperExtension extends AbstractExtension
|
||||
if (!isset($this->environment)) {
|
||||
throw new \LogicException(sprintf('You must call "setEnvironment()" before calling "%s()".', __METHOD__));
|
||||
}
|
||||
if (!isset($this->escaper)) {
|
||||
throw new \LogicException(sprintf('You must call "setEscaperRuntime()" before calling "%s()".', __METHOD__));
|
||||
}
|
||||
|
||||
$this->escapers[$strategy] = $callable;
|
||||
$callable = function ($string, $charset) use ($callable) {
|
||||
@@ -160,7 +160,7 @@ final class EscaperExtension extends AbstractExtension
|
||||
trigger_deprecation('twig/twig', '3.10', 'The "%s()" method is deprecated, use the "Twig\Runtime\EscaperRuntime::setSafeClasses()" method instead.', __METHOD__);
|
||||
|
||||
if (!isset($this->escaper)) {
|
||||
throw new \LogicException(sprintf('You must call "setEscaperRuntime()" before calling %s().', __METHOD__));
|
||||
throw new \LogicException(sprintf('You must call "setEnvironment()" before calling "%s()".', __METHOD__));
|
||||
}
|
||||
|
||||
$this->escaper->setSafeClasses($safeClasses);
|
||||
@@ -174,7 +174,7 @@ final class EscaperExtension extends AbstractExtension
|
||||
trigger_deprecation('twig/twig', '3.10', 'The "%s()" method is deprecated, use the "Twig\Runtime\EscaperRuntime::addSafeClass()" method instead.', __METHOD__);
|
||||
|
||||
if (!isset($this->escaper)) {
|
||||
throw new \LogicException(sprintf('You must call setEscaperRuntime() before calling %s().', __METHOD__));
|
||||
throw new \LogicException(sprintf('You must call "setEnvironment()" before calling "%s()".', __METHOD__));
|
||||
}
|
||||
|
||||
$this->escaper->addSafeClass($class, $strategies);
|
||||
|
||||
@@ -28,8 +28,6 @@ class EscaperTest extends TestCase
|
||||
{
|
||||
$twig = new Environment($this->createMock(LoaderInterface::class));
|
||||
$escaperExt = $twig->getExtension(EscaperExtension::class);
|
||||
$escaperExt->setEnvironment($twig);
|
||||
$escaperExt->setEscaperRuntime($twig->getRuntime(EscaperRuntime::class));
|
||||
$escaperExt->setEscaper('foo', 'Twig\Tests\legacy_escaper');
|
||||
$this->assertSame($expected, $twig->getRuntime(EscaperRuntime::class)->escape($string, $strategy));
|
||||
}
|
||||
@@ -43,6 +41,19 @@ class EscaperTest extends TestCase
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideCustomEscaperCases
|
||||
*
|
||||
* @group legacy
|
||||
*/
|
||||
public function testCustomEscaperWithoutCallingSetEscaperRuntime($expected, $string, $strategy)
|
||||
{
|
||||
$twig = new Environment($this->createMock(LoaderInterface::class));
|
||||
$escaperExt = $twig->getExtension(EscaperExtension::class);
|
||||
$escaperExt->setEscaper('foo', 'Twig\Tests\legacy_escaper');
|
||||
$this->assertSame($expected, $twig->getRuntime(EscaperRuntime::class)->escape($string, $strategy));
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
*/
|
||||
@@ -50,14 +61,10 @@ class EscaperTest extends TestCase
|
||||
{
|
||||
$env1 = new Environment($this->createMock(LoaderInterface::class));
|
||||
$escaperExt1 = $env1->getExtension(EscaperExtension::class);
|
||||
$escaperExt1->setEnvironment($env1);
|
||||
$escaperExt1->setEscaperRuntime($env1->getRuntime(EscaperRuntime::class));
|
||||
$escaperExt1->setEscaper('foo', 'Twig\Tests\legacy_escaper');
|
||||
|
||||
$env2 = new Environment($this->createMock(LoaderInterface::class));
|
||||
$escaperExt2 = $env2->getExtension(EscaperExtension::class);
|
||||
$escaperExt2->setEscaperRuntime($env2->getRuntime(EscaperRuntime::class));
|
||||
$escaperExt2->setEnvironment($env2);
|
||||
$escaperExt2->setEscaper('foo', 'Twig\Tests\legacy_escaper_again');
|
||||
|
||||
$this->assertSame('fooUTF-8', $env1->getRuntime(EscaperRuntime::class)->escape('foo', 'foo'));
|
||||
|
||||
Reference in New Issue
Block a user