要求在子项中定义一个 Twig 块

Require a Twig Block Be Defined in a Child

我将 <title> 标记定义为我的基础 twig 文件中的一个块,我想确保我的所有视图都覆盖这个块。有没有一种方法可以根据需要标记该块,以便在我忘记时收到错误消息?

这不是 Twig 内置的(也许您应该提出功能请求!)

我能想到一种方法,但它并不完全使用块。

如果您有 base.html.twig 个,让我们举个简单的例子:

<title>{% block title %}{{ title }}{% endblock %}</title>

然后你扩展这个块:

{% extends '::base.html.twig' %}

但不要声明 {% block title %} - 然后 Twig 将在开发环境中(以及生产环境中的 prod.log 中)发出关于未设置变量的通知。 (你真的不应该让 Symfony 为像这样微不足道的事情在 Production 中抛出错误。)

那么有两种方式"satisfying the requirement":

  1. title 变量传递到扩展的 Twig 文件中
  2. 用您自己的内容覆盖 title

示例 1,在您的控制器中:

return $this->render('AcmeBundle:Extended:view.html.twig', array(
    'title' => 'My fancy title'
));

示例 2,在您的 Twig 文件中:

{% extends 'AcmeBundle::base.html.twig' %}

{% block title %}My fancy title{% endblock %}