每个Twig开发人员都应该能够回答的20个问题的答案和解释

本文包含以前发布的20个问题的测试答案, 每个Twig开发人员都应该能够回答。
1.如何在Twig中声明变量?

  • C
这是正确的答案, 因为在变量{%, 变量名, 用于定义其值的等号和要分配的值之后, {%
{% set myVariable = 'My Text' %}

阅读官方文档中的set关键字以获取更多信息。
2.以下代码段的输出是什么?
{{ {name: "Xavier", lastName: "Nemo", first: false, address: "P Sherman, 42 Wallaby Way, Sydney"} | first }}

  • d
当第一个过滤器返回序列, 映射或字符串的第一个” 元素” 时, 该片段的输出将为” Xavier” 。有关此过滤器的更多信息, 请访问此处的官方文档。
3. Twig的注释语法是什么?
  • d
Twig中带注释的代码以方括号和数字符号开头, 并分别以相反的顺序闭合。注释块中的任何内容都不会显示在视图上, 也不会被Twig处理。注释语法也支持多行:
{#Everything inside is a comment#}

4. Twig中的输出转义
  • 一个
  • d
在这个问题上, 三个答案是正确的。默认情况下, 转义已在Twig中启用, 可以通过使用包含安全内容的变量中的原始过滤器来忽略该转义。因此, 它可以自动保护XSS攻击, 因此浏览器不会解析HTML标记。在内部, 转义使用htmlspecialchars()PHP函数。
5. Twig是否在for循环的范围内创建一个特殊变量以获取有关当前迭代的信息?如果是这样, 它的名字是什么?
  • C
在for循环块中, 你可以访问循环变量中包含的一些特殊变量:
变量 描述
循环索引 循环的当前迭代。 (1个已索引)
loop.index0 循环的当前迭代。 (0索引)
loop.revindex The number of iterations from the end of the loop (1 indexed)
loop.revindex0 The number of iterations from the end of the loop (0 indexed)
循环优先 如果第一次迭代为真
最后循环 如果最后一次迭代则为真
循环长度 序列中的项目数
loop.parent 父上下文
有关此特殊变量的更多信息, 请在此处阅读官方文档。
6.以下代码段的输出是什么?
{% verbatim %}< ul> {% for row in rows %}< li title="{{ rows.title }}"> {{ rows.text }}< /li> {% endfor %}< /ul> {% endverbatim %}

verbatim标记存在, 并且允许你在块内编写任何Twig语法, 但是不会被解析为twig而是纯文本, 因此输出将与Verbatim块内的内容相同。有关此块的更多信息, 请在此处阅读文档。
7. Twig中不存在以下哪个默认过滤器?
  • 一个
  • ?
默认情况下, Twig中不存在unescape或strtolower过滤器, 但是你可以通过创建自定义扩展名来创建此类过滤器。
8.以下代码段的输出是什么?
{% spaceless %}< divclass="welcome-alert"> < h1 > Welcome David !< /h1> < /div> {% endspaceless %}

  • d
正确的选项是D, 其输出为:
< divclass="welcome-alert"> < h1 > Welcome David !< /h1> < /div>

原因很简单, 因为无空格块会删除HTML标记之间的空格, 而不是HTML标记内的空格或纯文本中的空格, 因此其他选项不正确。要了解有关此块的更多信息, 请在此处阅读文档。
9.连接字符串的正确语法是什么?
  • C
你可以使用?(波浪号)运算符来连接字符串。
10.如何验证两个变量是否相同(重要的相同不相等)?
  • ?
与test相同, 检查一个变量是否与另一个变量相同。这等效于PHP中的===, 但是在Twig中未保留此语法。有关此测试的更多信息, 请在此处阅读官方文档。
11.默认情况下可以在Twig中使用相同的PHP常量吗?
  • C
你可以检索任何PHP常量的值, 只要该常量在PHP上可用, 就可以使用常量函数, 该函数从所需常量的名称中返回该值, 例如, 获取JSON_PRETTY_PRINT常量的值以打印标识的JSON字符串, 你可以这样做:
{% set data = http://www.srcmini.com/{"Hey": "Ho", "What": 12, "Value" : true}%}{{ data|json_encode(constant('JSON_PRETTY_PRINT'))}}

12.如何使用Twig从数组中打印随机值?
  • 一个
random函数根据提供的参数类型返回随机值:
  • 序列中的随机项目
  • 字符串中的随机字符
  • 0到integer参数(包括)之间的随机整数。
在这种情况下, 该函数正在接收一个数组, 并且将从该数组中选择一个随机项。没有随机过滤器或随机化功能。
13.如何从以下键值数组中打印” a-b” 属性的值?
{% set MyVariable = {"a": 1, "b": 2, "c": 3, "a-b": 4}%}

  • C
你可以使用键符号或Twig的attribute函数从数组访问属性, 该函数将数组作为第一个参数, 并将要检索的属性作为第二个参数。
14.以下代码段的输出是什么?
{% with %}{% set MyVariable = 42 %}{% endwith %}{{ MyVariable }}

  • 一个
使用with标记, 你可以创建一个新的内部作用域。在此范围内设置的变量在该范围之外不可见。当我们在范围之外打印MyVariable时, 代码将引发异常。
15. Twig中不存在以下哪个测试关键字?
  • ?
Twig中没有名为instanceof的测试, 但是其余测试仍然存在。
16.是否可以将现有块的内容打印两次?
你不能两次声明一个块, 但是可以使用期望将要复制的块名称作为第一个参数的块函数来检索该块的内容:
< title> {% block title %}{% endblock %}< /title> < h1> {{ block('title') }}< /h1> {% block body %}{% endblock %}

17.以下代码段的输出是什么?
{% set items = ['a', 'b', 'c', 'd', 'e', 'f', 'g', "h"] %}< table> {% for row in items|batch(4) %}< tr> {%- for column in row -%}< td> {{ column }}< /td> {%- endfor -%}< /tr> {% endfor %}< /table>

  • 一个
批处理筛选器存在, 并将现有数组从作为第一个参数的整数Providen的大小拆分成多个块(也可以是字符串格式的数字)。通过将给定的项目数组拆分为相同大小的块, 我们将在HTML上为该表生成2行, 因此选项A和B是可能的, 但是for循环中的空格控制Providen会丢弃B, 因为它显示了输出没有空格, 因此A是正确的答案。有关批处理过滤器的更多信息, 请在此处阅读官方文档。
18.以下代码段的输出是什么?
{{ 12.4 // 2 }}

  • C
答案是6。双斜杠运算符, 将两个数相除并返回有底整数结果。这只是圆形过滤器的语法糖。
19.以下哪个代码片段允许打印用逗号分隔的字母?
  • 一个
  • d
这两个选项都是正确的, 因为范围函数返回的列表包含整数和字符的算术级数。 Twig内置的..运算符是用于范围函数的语法糖(步长为1, 如果开始点大于结束点, 则为-1)。
20.以下代码段的输出是什么?
  • 一个
由于我们没有任何上下文, 因此可以假设该变量不存在, 因此将使用默认过滤器。如果值未定义或为空, 则默认过滤器将返回传递的默认值, 否则该变量的值(在这种情况下为简单字符串)即” 用户未登录” 。
你的测试中有多少个答案是正确的?我们很高兴在评论框中听到你的结果。
【每个Twig开发人员都应该能够回答的20个问题的答案和解释】编码愉快!

    推荐阅读