是否有Twig速记语法用于输出条件文本


72

Twig中是否有较短的语法来输出条件字符串?

<h1>{% if not info.id %}create{% else %}edit{% endif %}</h1>

传统的php比这更简单:

<h1><?php info['id']? 'create' : 'edit' ?></h1>

Answers:


147

这应该工作:

{{ not info.id ? 'create' : 'edit' }}

同样,这被称为三元运算符。它有点隐藏在文档中: twig docs:运算符

从他们的文档中,基本结构是:

{{ foo ? 'yes' : 'no' }}

1
由于代码未包装在语句定界符{%%}中,因此“ if”似乎不起作用。省略“ if”可避免上述异常。
贾斯汀

没错,我只是在这里进行了测试,而“ if”是隐式的。
mcriecken

问题,如果没有定义foo
khaled_webdev

6
在三元组中,您为什么会这样做?{{不是info.id吗?'create':'edit'}}只需简单地应用逻辑即可。{{info.id?'edit':'create'}}'not'操作只会使问题感到困惑-无论如何,您都必须指定两个结果字符串,为什么在不需要时通过执行求反操作使代码更难读呢?
迈克尔·莫里斯

1
是的,这可行!输入预设值验证的理想之选(value="{{ person.curp is not null ? person.curp : '' }}"
FernandoLeón19年

33

如果需要比较该值等于某项操作,则可以执行以下操作:

{{  user.role == 'admin' ? 'is-admin' : 'not-admin' }}

您可以在树枝内使用Elvis Operator:

{{  user ? 'is-user' }} 

{{  user ?: 'not-user' }} // note that it evaluates to the left operand if true ( returns the user ) and right if not

所谓的猫王运算符不起作用。我收到有关将岛屿包裹在parens中的错误
TheRealChx101 '20

@ TheRealChx101不确定您的意思wrapping the island in parens-您可以分享您的示例吗?
Raja Khoury

将IF代码岛包装在括号中。我认为这可能是我正在使用的版本。它实际上是JTWIG(Java版本),但这无关紧要。
TheRealChx101'5

不熟悉Java,它可能与您的框架/ jtwig有关,但我对此表示怀疑。值得一提的是,尽管所有这些问题的答案都是正确的,但我更喜欢在大多数情况下使用常规的if / else语句,这对您有用吗?对不起,我在这里无济于事。
Raja Khoury

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.