Symfony视图引擎 Symfony路由 Symfony Doctrine ORM 视图层是MVC应用程序的表示层。它将应用程序逻辑与表示逻辑分开。 当控制器需要生成HTML,CSS或任何其他内容时,它会将任务转发给模板引擎。 模板 模板基本上是用于生成任何基于文本的文档(如HTML,XML等)的文本文件。它用于节省时间并减少错误。 默认情况下,模板可以驻留在两个不同的位置 - 应用程序/资源/视图/ - 应用程序的视图目录可以包含应用程序的布局和应用程序包的模板。 它也覆盖第三方捆绑模板。 vendor / path / to / Bundle / Resources / views / - 每个第三方包在其“Resources / views /”目录中包含其模板。 枝条引擎 Symfony使用强大的模板语言 Twig 。Twig允许您以非常简单的方式编写简洁易读的模板。Twig模板很简单,不会处理PHP标签。Twig执行空白控件,沙箱和自动HTML转义。 句法 Twig包含三种类型的特殊语法 - {{...}} - 将变量或表达式的结果打印到模板。 {%...%} - 控制模板逻辑的标签。 它主要用于执行功能。 {#...#} - 评论语法。 它用于添加单行或多行注释。 树枝基本模板位于 “app / Resources / views / base.html.twig” 。 例 我们来看一个使用树枝引擎的简单例子。 StudentController.php <?php namespace AppBundle\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Component\HttpFoundation\Response; use Symfony\Bundle\FrameworkBundle\Controller\Controller; class StudentController extends Controller { /** * @Route("/student/home") */ public function homeAction() { return $this->render('student/home.html.twig'); } } 这里, render() 方法呈现模板并将该内容放入Response对象中。 现在移到“views”目录并创建一个文件夹“student”,并在该文件夹内创建一个文件“home.html.twig”。在文件中添加以下更改。 home.html.twig //app/Resources/views/student/home.html.twig <h3>Student application!</h3> 您可以通过请求URL“http:// localhost:8000 / student / home”来获得结果。 默认情况下,Twig带有一长串标签,过滤器和功能。我们一一详细介绍一下。 标签 Twig支持以下重要标签 - 做 该 做 标签执行类似的功能与它没有打印任何异常的正则表达式。其语法如下 - {% do 5 + 6 %} 包括 include语句包含一个模板并将该文件的渲染内容返回到当前名称空间。其语法如下 - {% include 'template.html' %} 扩展 可以使用扩展标签来扩展另一个模板。其语法如下 - {% extends "template.html" %} 块 块充当占位符并替换内容。块名称由字母数字字符和下划线组成。例如, <title>{% block title %}{% endblock %}</title> 嵌 所述 嵌入 的两者都包括并延伸标签进行组合。它允许你包含另一个模板的内容。它还允许您覆盖在包含的模板中定义的任何块,例如扩展模板时。其语法如下 - {% embed “new_template.twig” %} {# These blocks are defined in “new_template.twig" #} {% block center %} Block content {% endblock %} {% endembed %} 过滤 筛选器部分允许您在模板数据块上应用常规的Twig筛选器。例如, {% filter upper %} symfony framework {% endfilter %} 在这里,文本将被改为大写。 对于 For 循环获取序列中的每个项目。例如, {% for x in 0..10 %} {{ x }} {% endfor %} 如果 Twig中的 if 语句与PHP相似。表达式评估为true或false。例如, {% if value == true %} <p>Simple If statement</p> {% endif %} 过滤器 Twig包含过滤器。它用于在呈现之前修改内容。以下是一些值得注意的过滤器。 长度 长度过滤器返回字符串的长度。其语法如下 - {% if name|length > 5 %} ... {% endif %} 降低 较低的筛选器将值转换为小写。例如, {{ 'SYMFONY'|lower }} 它会产生以下结果 - symfony 同样,你可以尝试大写。 更换 替换过滤器通过替换占位符来格式化给定的字符串。例如, {{ "tutorials point site %si% and %te%."|replace({'%si%': web, '%te%': "site"}) }} 它会产生以下结果 - tutorials point website 标题 标题过滤器返回值的标题版本。例如, {{ 'symfony framework '|title }} 它会产生以下结果 - Symfony Framework 分类 排序过滤器对数组进行排序。其语法如下 - {% for user in names|sort %} ... {% endfor %} 修剪 修剪过滤器从字符串的开始和结尾修剪空格(或其他字符)。例如, {{ ' Symfony! '|trim }} 它会产生以下结果 - Symfony! 功能 Twig支持功能。它用于获得特定的结果。以下是一些重要的Twig功能。 属性 的 属性 功能可被用于访问变量的“动态”属性。其语法如下 - {{ attribute(object, method) }} {{ attribute(object, method, arguments) }} {{ attribute(array, item) }} 例如, {{ attribute(object, method) is defined ? 'Method exists' : 'Method does not exist' }} 不变 常量函数返回指定字符串的常量值。例如, {{ constant('Namespace\\Classname::CONSTANT_NAME') }} 周期 循环函数在一组值上循环。例如, {% set months = [‘Jan’, ‘Feb’, ‘Mar’] %} {% for x in 0..12 %} { cycle(months, x) }} {% endfor %} 日期 将参数转换为日期以允许日期比较。例如, <p>Choose your location before {{ 'next Monday'|date('M j, Y') }}</p> 它会产生以下结果 - Choose your location before May 15, 2017 参数必须是PHP支持的日期和时间格式之一。 您可以传递时区作为第二个参数。 倾倒 转储函数转储有关模板变量的信息。例如, {{ dump(user) }} 马克斯 max函数返回一个序列的最大值。例如, {{ max(1, 5, 9, 11, 15) }} 敏 min函数返回序列的最小值。例如, {{ min(1, 3, 2) }} 包括 包含函数返回模板的渲染内容。例如, {{ include('template.html') }} 随机 随机函数生成一个随机值。例如, {{ random([‘Jan’, ‘Feb’, ‘Mar’, ‘Apr’]) }} {# example output: Jan #} 范围 范围函数返回一个包含整数算术级数的列表。例如, {% for x in range(1, 5) %} {{ x }}, {% endfor %} 它会产生以下结果 - 1,2,3,4,5 布局 布局表示多个视图的公共部分,即例如页面页眉和页脚。 模板继承 另一个模板可以被使用。我们可以使用模板继承概念来实现这一点。模板继承允许您构建一个基础“布局”模板,其中包含定义为块的所有网站常用元素。 让我们举一个简单的例子来更多地了解模板继承。 例 考虑位于“app / Resources / views / base.html.twig”的基础模板。在文件中添加以下更改。 base.html.twig <!DOCTYPE html> <html> <head> <meta charset = "UTF-8"> <title>{% block title %}Parent template Layout{% endblock %}</title> </head> </html> 现在转到位于 “app / Resources / views / default / index.html.twig” 的索引模板文件。在其中添加以下更改。 index.html.twig {% extends 'base.html.twig' %} {% block title %}Child template Layout{% endblock %} 这里, {%extends%} 标记通知模板引擎首先评估基础模板,该模板设置布局并定义块。然后呈现子模板。子模板可以扩展基本布局并覆盖标题栏。现在,请求URL“http:// localhost:8000”,您可以获得它的结果。 资产 该资产管理Web资产(如CSS样式表,JavaScript文件和图像文件)的URL生成和版本控制。 JavaScript的 要包含JavaScript文件,请在任何模板中使用 javascripts 标记。 {# Include javascript #} {% block javascripts %} {% javascripts '@AppBundle/Resources/public/js/*' %} <script src="{{ asset_url }}"></script> {% endjavascripts %} {% endblock %} 样式表 要包含样式表文件,请在任何模板中使用 样式表 标签 {# include style sheet #} {% block stylesheets %} {% stylesheets 'bundles/app/css/*' filter = 'cssrewrite' %} <link rel = "stylesheet" href="{{ asset_url }}" /> {% endstylesheets %} {% endblock %} 图片 要包含图片,您可以使用图片标签。它被定义如下。 {% image '@AppBundle/Resources/public/images/example.jpg' %} <img src = "{{ asset_url }}" alt = "Example" /> {% endimage %} 复合资产 您可以将多个文件合并为一个文件。这有助于减少HTTP请求的数量,并产生更大的前端性能。 {% javascripts '@AppBundle/Resources/public/js/*' '@AcmeBarBundle/Resources/public/js/form.js' '@AcmeBarBundle/Resources/public/js/calendar.js' %} <script src = "{{ asset_url }}"></script> {% endjavascripts %} Symfony路由 Symfony Doctrine ORM