TransTokenParser为了学习(解析{% trans %}和{% trans with %}),我创建了自己的-> 并且解析器本身运行良好,除了后一种变体:trans with.
解析器读出分配的变量,但会自动转义",'因此它们不会显示(变量没有'或"直接来自解析器)。
例如,我们在树枝中有这个块:
{% trans with {'{test}': coolFunctionWhichReturnsString('testParameter')} %}
UNIQUE_TRANS_ID
{% endtrans %}
这个块被 trans 和诸如此类的东西解析得很好,但将“with”之后的部分变成了这样: {{test}: coolFunctionWhichReturnsString(testParameter)}
我试过在 Twig_Environment 中设置一个参数
new Twig_Environment(..., ['autoescape' => false])
我试过在 config.yml 下的 twig 中设置一个全局变量:
autoescape: false
这两种解决方案都没有反映 twig -> php 行为的变化。(它将 autoescape 设置为 false,如在此处初始化树枝环境时的 var_dump 中所见:
array (size=13)
'debug' => boolean true
'charset' => string 'UTF-8' (length=5)
'base_template_class' => string 'Twig_Template' (length=13)
'strict_variables' => boolean true
'autoescape' => boolean false
这是我的代码:
/**
* @return array
* @throws \Twig_Error_Syntax
*/
private function parseVariant(): array
{
$stream = $this->parser->getStream();
$trans = null;
$json = null;
//SIMPLE VARIANT trans
$stream->nextIf(\Twig_Token::PUNCTUATION_TYPE, '');
if (null !== $stream->nextIf(\Twig_Token::BLOCK_END_TYPE)) { //%} TRANS_LITERAL
$stream->nextIf(\Twig_Token::PUNCTUATION_TYPE, '');
$trans = $stream->expect(\Twig_Token::TEXT_TYPE)->getValue();
} elseif (null !== $stream->nextIf(\Twig_Token::NAME_TYPE, 'with')) { // {% trans with {} %} TRANS_LITERAL
$stream->next();
$json = implode($this->getInlineParams());
$stream->nextIf(\Twig_Token::PUNCTUATION_TYPE);
$stream->nextIf(\Twig_Token::BLOCK_END_TYPE);
$stream->nextIf(\Twig_Token::PUNCTUATION_TYPE);
$trans = $stream->expect(\Twig_Token::TEXT_TYPE)->getValue();
//die();
}
编辑:使用 ExpressionParser 会引发错误,因为键/值没有 "" 或 ''..
另一个编辑:我已经尝试在 twig 中修改运行时和初始化后的“转义”扩展,包括所有策略 - 没有任何帮助
有什么建议?提前致谢。
MMMHUHU