如何让 Symfony 和 Twig 使用模板
How to get Symfony and Twig to use Templates
我是 Symfony 4 和 Twig 2 的新手。
我只想让扩展模板的基本功能发挥作用。
不幸的是,Symfony and Twig 的文档没有解释我在寻找什么(Twig 文档主要只是代码的集合,只有最少的解释)。或者我不明白... :)
这很简单。
我得到了通常的 base.html.twig:
base.html.twig
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{% block title %}Welcome!{% endblock %}</title>
{% block stylesheets %}{% endblock %}
</head>
<body>
{% block body %}Old Content{% endblock %}
{% block javascripts %}{% endblock %}
</body>
</html>
我只在正文块中添加了一些默认文本。
下一个应该扩展上面文件的简单文件:
body.html.twig
{% extends "base.html.twig" %}
{% block body %}
New content
{% endblock %}
为了输出所有这些,我创建了一个控制器:
baseController.php
<?php
namespace App\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class baseController extends AbstractController
{
/**
* @Route("/")
*/
public function base()
{
return $this->render('base.html.twig');
}
}
?>
测试了 twigfiddle.com 中的模板,一切正常,所以它们肯定没问题。
上面的设置输出 base.html.twig 就好了(见 "Old Content" 文本,但完全忽略 body.html.twig。那么显而易见的问题是:我overlooking/which基本概念是什么我没有掌握?
感谢您的帮助。
base.html.twig 是您的骨架,body.html.twig 是您的页面特定实现。您的控制器应始终呈现 body.html.twig,这将覆盖在扩展 base.html.twig.
中找到的块
我脑海中的一些例子:
base.html.twig:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{% block title %}Welcome!{% endblock %}</title>
{% block stylesheets %}{% endblock %}
</head>
<body>
{% include 'header.html.twig' %}
{% block body %}{% endblock %}
{% include 'footer.html.twig' %}
</body>
{% block javascripts %}{% endblock %}
</html>
home.html.twig:
{% extends "base.html.twig" %}
{% block body %}
<h1>header of this page</h1>
{% include 'newsletter-subscribe.html.twig' %}
{% include 'greeting.html.twig' with { name: 'Max' } %}
<p>Some content</p>
{% endblock %}
greeting.html.twig:
Hello {{ name }}
只需自己创建页眉和页脚。确保在控制器中呈现 home.html.twig
。
如果您想深入研究它并且必须使用嵌套块,请使用 https://twig.symfony.com/doc/2.x/functions/parent.html
base.html.twig:
{% block body %}
Hello World
{% endblock %}
home.html.twig:
{% extends 'base.html.twig' %}
{% block body %}
{{ parent() }}
how are you
{% endblock %}
应该输出Hello world how are you
。不过,我不鼓励使用该功能,因为从设计师的角度来看,这种依赖关系并不明确。还要小心嵌入,它对树枝的影响比包含或简单块的影响更大。
我是 Symfony 4 和 Twig 2 的新手。
我只想让扩展模板的基本功能发挥作用。
不幸的是,Symfony and Twig 的文档没有解释我在寻找什么(Twig 文档主要只是代码的集合,只有最少的解释)。或者我不明白... :)
这很简单。
我得到了通常的 base.html.twig:
base.html.twig
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{% block title %}Welcome!{% endblock %}</title>
{% block stylesheets %}{% endblock %}
</head>
<body>
{% block body %}Old Content{% endblock %}
{% block javascripts %}{% endblock %}
</body>
</html>
我只在正文块中添加了一些默认文本。
下一个应该扩展上面文件的简单文件:
body.html.twig
{% extends "base.html.twig" %}
{% block body %}
New content
{% endblock %}
为了输出所有这些,我创建了一个控制器:
baseController.php
<?php
namespace App\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class baseController extends AbstractController
{
/**
* @Route("/")
*/
public function base()
{
return $this->render('base.html.twig');
}
}
?>
测试了 twigfiddle.com 中的模板,一切正常,所以它们肯定没问题。
上面的设置输出 base.html.twig 就好了(见 "Old Content" 文本,但完全忽略 body.html.twig。那么显而易见的问题是:我overlooking/which基本概念是什么我没有掌握?
感谢您的帮助。
base.html.twig 是您的骨架,body.html.twig 是您的页面特定实现。您的控制器应始终呈现 body.html.twig,这将覆盖在扩展 base.html.twig.
中找到的块我脑海中的一些例子:
base.html.twig:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{% block title %}Welcome!{% endblock %}</title>
{% block stylesheets %}{% endblock %}
</head>
<body>
{% include 'header.html.twig' %}
{% block body %}{% endblock %}
{% include 'footer.html.twig' %}
</body>
{% block javascripts %}{% endblock %}
</html>
home.html.twig:
{% extends "base.html.twig" %}
{% block body %}
<h1>header of this page</h1>
{% include 'newsletter-subscribe.html.twig' %}
{% include 'greeting.html.twig' with { name: 'Max' } %}
<p>Some content</p>
{% endblock %}
greeting.html.twig:
Hello {{ name }}
只需自己创建页眉和页脚。确保在控制器中呈现 home.html.twig
。
如果您想深入研究它并且必须使用嵌套块,请使用 https://twig.symfony.com/doc/2.x/functions/parent.html
base.html.twig:
{% block body %}
Hello World
{% endblock %}
home.html.twig:
{% extends 'base.html.twig' %}
{% block body %}
{{ parent() }}
how are you
{% endblock %}
应该输出Hello world how are you
。不过,我不鼓励使用该功能,因为从设计师的角度来看,这种依赖关系并不明确。还要小心嵌入,它对树枝的影响比包含或简单块的影响更大。