已弃用的功能
本文档列出了 Twig 3.x 中已弃用的功能。已弃用的功能为了向后兼容性而保留,并在下一个主要版本中移除(在 Twig 3.x 中已弃用的功能将在 Twig 4.0 中移除)。
函数
twig_test_iterable
函数已弃用;请使用原生 PHPis_iterable
函数代替。attribute
函数从 Twig 3.15 开始已弃用。请使用.
运算符代替,并将名称用括号括起来1 2 3 4 5 6 7 8 9
{# before #} {{ attribute(object, method) }} {{ attribute(object, method, arguments) }} {{ attribute(array, item) }} {# after #} {{ object.(method) }} {{ object.(method)(arguments) }} {{ array[item] }}
请注意,为了实现更平滑的升级路径,它不会在 4.0 中移除。
扩展
Twig 扩展中定义的所有函数从 Twig 3.9.0 开始都标记为内部函数,并将在 Twig 4.0 中移除。它们已被各自扩展类上的内部方法取代。
如果您在代码中使用了
twig_escape_filter()
函数,请使用$env->getRuntime(EscaperRuntime::class)->escape()
代替。Twig\Extension\EscaperExtension
中的以下方法已弃用:setEscaper()
,getEscapers()
,setSafeClasses
,addSafeClasses()
。请在Twig\Runtime\EscaperRuntime
类上使用相同的方法代替之前:
$twig->getExtension(EscaperExtension::class)->METHOD();
之后:
$twig->getRuntime(EscaperRuntime::class)->METHOD();
节点
Twig\Node\Node
类的 "tag" 构造函数参数从 Twig 3.12 开始已弃用,因为标签现在在需要时由解析器自动设置。- 以下
Twig\Node\Node
方法将在 Twig 4.0 中为其 "name" 参数接受字符串或整数(而不仅仅是字符串):getNode()
,hasNode()
,setNode()
,removeNode()
, 和deprecateNode()
。 - 从 Twig 3.12 开始,不将
BodyNode
实例作为ModuleNode
或MacroNode
构造函数的主体传递已被弃用。 - 从 Twig 3.12 开始,从
TokenParserInterface::parse()
返回null
已被弃用(因为接口禁止)。 Twig\Node\Expression\CallExpression::compileArguments()
方法的第二个参数已弃用。Twig\Node\Expression\NameExpression::isSimple()
和Twig\Node\Expression\NameExpression::isSpecial()
方法从
Twig 3.11 开始已弃用,并将在 Twig 4.0 中移除。Twig\Node\Expression\FilterExpression
的filter
节点从 Twig 3.12 开始已弃用,并将在 4.0 中移除。请使用filter
属性代替以获取过滤器之前:
$node->getNode('filter')->getAttribute('value')
之后:
$node->getAttribute('twig_callable')->getName()
从 Twig 3.12 开始,将名称传递给
Twig\Node\Expression\FunctionExpression
,Twig\Node\Expression\FilterExpression
, 和Twig\Node\Expression\TestExpression
已被弃用。从 Twig 4.0 开始,您需要传递TwigFunction
,TwigFilter
, 或TestFilter
代替。让我们以
FunctionExpression
为例。如果您有一个节点扩展了
FunctionExpression
并且您没有覆盖构造函数,则无需执行任何操作。但是,如果您覆盖了构造函数,则需要更改名称的类型提示,并将构造函数标记为Twig\Attribute\FirstClassTwigCallableReady
属性。之前
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
class NotReadyFunctionExpression extends FunctionExpression { public function __construct(string $function, Node $arguments, int $lineno) { parent::__construct($function, $arguments, $lineno); } } class NotReadyFilterExpression extends FilterExpression { public function __construct(Node $node, ConstantExpression $filter, Node $arguments, int $lineno) { parent::__construct($node, $filter, $arguments, $lineno); } } class NotReadyTestExpression extends TestExpression { public function __construct(Node $node, string $test, ?Node $arguments, int $lineno) { parent::__construct($node, $test, $arguments, $lineno); } }
之后
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
class ReadyFunctionExpression extends FunctionExpression { #[FirstClassTwigCallableReady] public function __construct(TwigFunction|string $function, Node $arguments, int $lineno) { parent::__construct($function, $arguments, $lineno); } } class ReadyFilterExpression extends FilterExpression { #[FirstClassTwigCallableReady] public function __construct(Node $node, TwigFilter|ConstantExpression $filter, Node $arguments, int $lineno) { parent::__construct($node, $filter, $arguments, $lineno); } } class ReadyTestExpression extends TestExpression { #[FirstClassTwigCallableReady] public function __construct(Node $node, TwigTest|string $test, ?Node $arguments, int $lineno) { parent::__construct($node, $test, $arguments, $lineno); } }
- 以下
Twig\Node\Expression\FunctionExpression
属性从 Twig 3.12 开始已弃用:needs_charset
,needs_environment
,needs_context
,arguments
,callable
,is_variadic
, 和dynamic_name
。 - 以下
Twig\Node\Expression\FilterExpression
属性从 Twig 3.12 开始已弃用:needs_charset
,needs_environment
,needs_context
,arguments
,callable
,is_variadic
, 和dynamic_name
。 - 以下
Twig\Node\Expression\TestExpression
属性从 Twig 3.12 开始已弃用:arguments
,callable
,is_variadic
, 和dynamic_name
。 MethodCallExpression
类从 Twig 3.15 开始已弃用,请使用MacroReferenceExpression
代替。Twig\Node\Expression\TempNameExpression
类从 Twig 3.15 开始已弃用;请使用Twig
代替。\Node \Expression \Variable \LocalVariable Twig\Node\Expression\NameExpression
类从 Twig 3.15 开始已弃用;请使用Twig
代替。\Node \Expression \Variable \ContextVariable Twig\Node\Expression\AssignNameExpression
类从 Twig 3.15 开始已弃用;请使用Twig
代替。\Node \Expression \Variable \AssignContextVariable - 使用
echo
或print
的节点实现应使用yield
代替;所有节点实现都应在其类上使用#[\Twig\Attribute\YieldReady]
属性,一旦它们为yield
做好准备;当所有节点都使用#[\Twig\Attribute\YieldReady]
属性时,可以打开use_yield
环境选项。
Twig\Node\InlinePrint
类从 Twig 3.16 开始已弃用,没有替代品。Twig\Node\Expression\NullCoalesceExpression
类从 Twig 3.17 开始已弃用,请使用Twig
代替。\Node \Expression \Binary \NullCoalesceBinary Twig\Node\Expression\ConditionalExpression
类从 Twig 3.17 开始已弃用,请使用Twig
代替。\Node \Expression \Ternary \ConditionalTernary
节点访问器
Twig\NodeVisitor\AbstractNodeVisitor
类已弃用,请实现Twig\NodeVisitor\NodeVisitorInterface
接口代替。Twig\NodeVisitor\OptimizerNodeVisitor::OPTIMIZE_RAW_FILTER
和Twig\NodeVisitor\OptimizerNodeVisitor::OPTIMIZE_TEXT_NODES
选项从 Twig 3.12 开始已弃用,并将在 Twig 4.0 中移除;它们不再执行任何操作。
解析器
Twig\Parser
中的以下方法从 Twig 3.12 开始已弃用:getBlockStack()
,hasBlock()
,getBlock()
,hasMacro()
,hasTraits()
,getParent()
。- 从 Twig 3.12 开始,将
null
传递给Twig\Parser::setParent()
已被弃用。 Twig\Parser::getExpressionParser()
方法从 Twig 3.21 开始已弃用,请使用Twig\Parser::parseExpression()
代替。Twig\ExpressionParser
类从 Twig 3.21 开始已弃用parseExpression()
, 请使用Parser::parseExpression()
parsePrimaryExpression()
, 请使用Parser::parseExpression()
parseStringExpression()
, 请使用Parser::parseExpression()
parseHashExpression()
, 请使用Parser::parseExpression()
parseMappingExpression()
, 请使用Parser::parseExpression()
parseArrayExpression()
, 请使用Parser::parseExpression()
parseSequenceExpression()
, 请使用Parser::parseExpression()
parsePostfixExpression
parseSubscriptExpression
parseFilterExpression
parseFilterExpressionRaw
parseArguments()
, 请使用Twig\ExpressionParser\Infix\ArgumentsTrait::parseNamedArguments()
parseAssignmentExpression
, 请使用AbstractTokenParser::parseAssignmentExpression
parseMultitargetExpression
parseOnlyArguments()
, 请使用Twig\ExpressionParser\Infix\ArgumentsTrait::parseNamedArguments()
令牌
- 从 Twig 3.16 开始,不将
Source
实例传递给Twig\TokenStream
构造函数已被弃用。 Token::getType()
方法从 Twig 3.19 开始已弃用,请使用Token::test()
代替。Token::ARROW_TYPE
常量从 Twig 3.21 开始已弃用,箭头=>
现在是一个运算符 (Token::OPERATOR_TYPE
)。- 值为
(
,[
,|
,.
,?
, 或?:
的Token::PUNCTUATION_TYPE
现在是Token::OPERATOR_TYPE
类型。
模板
- 将
Twig\Template
实例传递给 Twig 公共 API 已被弃用(例如在Environment::resolveTemplate()
,Environment::load()
, 和Template::loadTemplate()
中);请传递Twig\TemplateWrapper
实例代替。
过滤器
spaceless
过滤器从 Twig 3.12 开始已弃用,并将在 Twig 4.0 中移除。
沙箱
- 在沙箱中默认允许
extends
和use
标签从 Twig 3.12 开始已弃用。如果需要在 4.0 中使用它们,您需要显式允许它们。 弃用
sandbox
标签,请使用include
函数的sandboxed
选项代替之前
1 2 3
{% sandbox %} {% include 'user_defined.html.twig' %} {% endsandbox %}
之后
1
{{ include('user_defined.html.twig', sandboxed: true) }}
测试实用工具
- 实现数据提供程序方法
Twig\Test\NodeTestCase::getTests()
从 Twig 3.13 开始已弃用。请改为实现静态数据提供程序provideTests()
。 - 为了使其功能可用于静态数据提供程序,
Twig\Test\NodeTestCase
上的辅助方法getVariableGetter()
和getAttributeGetter()
已被弃用。请调用新方法createVariableGetter()
和createAttributeGetter()
代替。 Twig\Test\NodeTestCase::getEnvironment()
方法从 Twig 3.13 开始被认为是最终方法。如果您想覆盖 Twig 环境的构造方式,请覆盖createEnvironment()
代替。Twig\Test\IntegrationTestCase
上的getFixturesDir()
方法已弃用,请实现新的静态方法getFixturesDirectory()
代替,该方法将在 4.0 中变为抽象方法。Twig\Test\IntegrationTestCase
上的数据提供程序getTests()
和getLegacyTests()
从 Twig 3.13 开始被认为是最终方法。
环境
Twig\Environment::mergeGlobals()
方法从 Twig 3.14 开始已弃用,并将在 Twig 4.0 中移除之前
1
$context = $twig->mergeGlobals($context);
之后
1
$context += $twig->getGlobals();
函数/过滤器/测试
Twig 函数/过滤器/测试上的
deprecated
,deprecating_package
,alternative
选项从 Twig 3.15 开始已弃用,并将在 Twig 4.0 中移除。请使用deprecation_info
选项代替之前
1 2 3
$twig->addFunction(new TwigFunction('upper', 'upper', [ 'deprecated' => '3.12', 'deprecating_package' => 'twig/twig', ]));
之后
1 2 3
$twig->addFunction(new TwigFunction('upper', 'upper', [ 'deprecation_info' => new DeprecatedCallableInfo('twig/twig', '3.12'), ]));
- 对于可变参数,请使用蛇形命名法作为参数名称,以方便过渡到 4.0。
- 从 Twig 3.15 开始,将
string
或array
传递给接受箭头函数的 Twig 可调用参数已被弃用;这些参数在 4.0 中将具有\Closure
类型提示。 - 从
TwigFilter::getSafe()
和TwigFunction::getSafe()
返回null
从 Twig 3.16 开始已弃用;请返回[]
代替。
节点
- 直接实例化
Twig\Node\Node
从 Twig 3.15 开始已弃用。请根据用例使用EmptyNode
或Nodes
代替。Twig\Node\Node
类将在 Twig 4.0 中变为抽象类。 从 Twig 3.15 开始,不将
AbstractExpression
参数传递给以下Node
类构造函数已被弃用AbstractBinary
AbstractUnary
BlockReferenceExpression
TestExpression
DefinedTest
FilterExpression
RawFilter
DefaultFilter
InlinePrint
NullCoalesceExpression
运算符
- 从 Twig 3.21 开始,运算符优先级必须是 [0, 512] 范围的一部分。
- 从 Twig 3.15 开始,
.
运算符允许访问类常量。如果您不使用 UPPERCASE 常量名称,这可能会导致 BC 破坏。 在表达式中将
~
与+
或-
运算符一起使用,而不使用括号来明确优先级,从 Twig 3.15 开始会触发弃用警告(在 Twig 4.0 中,+
/-
的优先级将高于~
)。例如,以下表达式将在 Twig 3.15 中触发弃用警告
1
{{ '42' ~ 1 + 41 }}
为了避免弃用警告,请将连接操作用括号括起来以明确优先级
1 2 3 4 5
{{ ('42' ~ 1) + 41 }} {# this is equivalent to what Twig 3.x does without the parentheses #} {# or #} {{ '42' ~ (1 + 41) }} {# this is equivalent to what Twig 4.x will do without the parentheses #}
使用
??
而不使用显式括号来明确优先级,从 Twig 3.15 开始会触发弃用警告(在 Twig 4.0 中,??
将具有最低优先级)。例如,以下表达式将在 Twig 3.15 中触发弃用警告
1
{{ 'notnull' ?? 'foo' ~ '_bar' }}
为了避免弃用警告,请将
??
表达式用括号括起来以明确优先级1 2 3 4 5
{{ ('notnull' ?? 'foo') ~ '_bar' }} {# this is equivalent to what Twig 3.x does without the parentheses #} {# or #} {{ 'notnull' ?? ('foo' ~ '_bar') }} {# this is equivalent to what Twig 4.x will do without the parentheses #}
在表达式中将
not
一元运算符与*
,/
,//
, 或%
运算符一起使用,而不使用显式括号来明确优先级,从 Twig 3.15 开始会触发弃用警告(在 Twig 4.0 中,not
的优先级将高于*
,/
,//
, 和%
)。例如,以下表达式将在 Twig 3.15 中触发弃用警告
1
{{ not 1 * 2 }}
为了避免弃用警告,请将连接操作用括号括起来以明确优先级
1 2 3 4 5
{{ (not 1 * 2) }} {# this is equivalent to what Twig 3.x does without the parentheses #} {# or #} {{ (not 1) * 2 }} {# this is equivalent to what Twig 4.x will do without the parentheses #}
在表达式中将
|
运算符与+
或-
一起使用,而不使用显式括号来明确优先级,从 Twig 3.21 开始会触发弃用警告(在 Twig 4.0 中,|
的优先级将高于+
和-
)。例如,以下表达式将在 Twig 3.21 中触发弃用警告
1
{{ -1|abs }}
为了避免弃用警告,请添加括号以明确优先级
1 2 3 4 5
{{ -(1|abs) }} {# this is equivalent to what Twig 3.x does without the parentheses #} {# or #} {{ (-1)|abs }} {# this is equivalent to what Twig 4.x will do without the parentheses #}
Twig\Extension\ExtensionInterface::getOperators()
方法从 Twig 3.21 开始已弃用,请使用Twig\Extension\ExtensionInterface::getExpressionParsers()
代替之前
- public function getOperators(): array {
-
- return [
-
- 'not' => [
- 'precedence' => 10, 'class' => NotUnary::class,
],
];
}
之后
- public function getExpressionParsers(): array {
-
- return [
- new UnaryOperatorExpressionParser(NotUnary::class, 'not', 10),
];
}
Twig\OperatorPrecedenceChange
类从 Twig 3.21 开始已弃用,请使用Twig\ExpressionParser\PrecedenceChange
代替。