Symfony/Twig 在 if 条件下设置变量

Posted

技术标签:

【中文标题】Symfony/Twig 在 if 条件下设置变量【英文标题】:Symfony/Twig Set variables in if condition 【发布时间】:2017-08-04 13:21:49 【问题描述】:

我知道这真的很微不足道,并不那么重要,但它可以为我节省一些生命...... 你知道你可以在 php 中的 if 块中声明变量

if( $row = $sql->fetch )
    //do something with the $row if $row = null this part is skipped

在twig中我不能做例如(设置image = object.image,如果我的对象没有图像,则变量image变为null并且if语句不变为true

% if image = object.image %
    <img src=" image.getUrl() "> //and so on
% endif %

相反,我必须这样做(检查对象是否有图像,如果有,将其保存到新变量并用它做一些事情)

% if object.image %
    % set image = object.image %
    <img src=" image.getUrl() "> //and so on
% endif %

当然,我知道这不是第一世界的问题,您可能认为我的问题没用,但我必须每天多次写那些“更长”的陈述,这样我最终可以快几分钟。 那么有没有一种语法允许我在 if 块中设置变量而不是比较它们?

非常感谢

编辑 我不喜欢这个Can I define a variable in a PHP if condition? 只是在树枝上

【问题讨论】:

如果你有很多相同的代码,你应该考虑使用包含/宏的/扩展树枝Twig_SimpleFunctionTwig_SimpleFilter 你能发布一个现实生活中的例子,没有“等等”,让你的问题更明显吗? 你可以去掉set部分,直接用&lt;img src=" object.image.url "&gt; @mickdev 我知道,但我们大多有很长的结构,所以最后我会得到类似 entry-&gt;lnkSomeFieldName-&gt;first()-&gt;lnkCategory-&gt;first()-&gt;image-&gt;first()-&gt;getUrl() 的东西,如果我不这样分开的话,标题也一样 【参考方案1】:

不,没有办法在if 标记内声明变量。变量只能使用set 标签设置。

【讨论】:

太可惜了,谢谢。看来你是唯一懂我的人 @Anubarak 其他人试图解决 问题。但是,就像我说的,你不想解决问题,只想炫耀。并不是说我要为此责备你,但我想请你不要责怪那些试图提供帮助的人。 我不明白你是如何帮助我的……你只是说你不在乎,需要一个例子,但 Xabbuh 没有代码,对我的帮助最大。老实说,我真的不明白“其他人试图解决问题”的意思,我只是想知道它是否有语法。我感谢 DarkBee 的帮助,因为他试图为我创建一个解决方法。【参考方案2】:

你可以使用(查看here以获得更多帮助):

% if object.image is defined or object.image is not null %
   <img src=" image.url ">
% endif %

希望这会有所帮助!

【讨论】:

他的问题是如何减少代码量,而不是如何进一步扩展它 没错,我确实没有花时间完全理解这个问题!我太专注于如何找到答案。对不起... 看不到问题怎么能找到答案?

以上是关于Symfony/Twig 在 if 条件下设置变量的主要内容,如果未能解决你的问题,请参考以下文章

Symfony Twig渲染

Symfony4 Twig模板错误:变量“小部件”不存在

Symfony 2.8 Twig_Error_Runtime Sonata 管理包

如何在 Symfony (Twig) 中包含可重用的小部件?

使用 Symfony2/Twig 创建引导轮播

使用 Twig 和 Symfony2 在 javascript 中生成路由