[2.x] Allow using namespaced aliases as extension names

This commit is contained in:
Nicolas Grekas
2017-05-30 12:02:18 +02:00
parent 9cfb0f565c
commit 08a8840084
2 changed files with 15 additions and 1 deletions
+11 -1
View File
@@ -64,7 +64,13 @@ final class Twig_ExtensionSet
*/
public function hasExtension($class)
{
return isset($this->extensions[ltrim($class, '\\')]);
$class = ltrim($class, '\\');
if (!isset($this->extensions[$class]) && class_exists($class, false)) {
// For BC/FC with namespaced aliases
$class = (new ReflectionClass($class))->name;
}
return isset($this->extensions[$class]);
}
/**
@@ -77,6 +83,10 @@ final class Twig_ExtensionSet
public function getExtension($class)
{
$class = ltrim($class, '\\');
if (!isset($this->extensions[$class]) && class_exists($class, false)) {
// For BC/FC with namespaced aliases
$class = (new ReflectionClass($class))->name;
}
if (!isset($this->extensions[$class])) {
throw new Twig_Error_Runtime(sprintf('The "%s" extension is not enabled.', $class));
+4
View File
@@ -249,6 +249,9 @@ class Twig_Tests_EnvironmentTest extends PHPUnit_Framework_TestCase
$this->assertSame($ext, $twig->getExtension('Twig_Tests_EnvironmentTest_Extension'));
$this->assertSame($ext, $twig->getExtension('\Twig_Tests_EnvironmentTest_Extension'));
$this->assertTrue($twig->hasExtension('Twig\Tests\EnvironmentTest\Extension'));
$this->assertSame($ext, $twig->getExtension('Twig\Tests\EnvironmentTest\Extension'));
}
public function testAddExtension()
@@ -448,6 +451,7 @@ class Twig_Tests_EnvironmentTest_Extension extends Twig_Extension implements Twi
);
}
}
class_alias('Twig_Tests_EnvironmentTest_Extension', 'Twig\Tests\EnvironmentTest\Extension', false);
class Twig_Tests_EnvironmentTest_TokenParser extends Twig_TokenParser
{