symfony框架Twig模板语言的使用

简介: symfony框架Twig模板语言的使用

php的Twig模板语言:类似python的jinja2,语法什么的都是类似python

模板继承

模板路径:app/Resources/views/

母版:base.html.twig

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>{% block title %}自定义标题{% endblock title %}</title>
<!-- 新 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css">
<!-- 可选的Bootstrap主题文件(一般不用引入) -->
<link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">
<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
<script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script src="//cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</head>
<body>
<div class="row bg-primary">
    <div class="col-sm-1 col-xs-1"></div>
    <div class="col-sm-11 col-xs-11"><h1><a href="" style="text-decoration: none;color: white;">MyWebSite</a></h1></div>
</div>
{% block body %}
{% endblock body %}
</body>
</html>

list.html.twig

{% extends "base.html.twig" %}
{% block title %}MyWebSite{% endblock title %}
{% block body %}
<div class="row jumbotron">
    <div class="col-md-1 col-xs-1"></div>
    <div class="col-md-10 col-xs-10"><h1>Welcome to MyWebSite!</h1></div>
    <div class="col-md-1 col-xs-1"></div>
</div>
{% endblock body %}

show.html.twig

{% extends "base.html.twig" %}
{% block title %}博客内容{% endblock title %}
{% block body %}
<div class="row jumbotron">
    <div class="col-md-1 col-xs-1"></div>
    <div class="col-md-10 col-xs-10"><h1>我的第一篇博客</h1></div>
    <div class="col-md-1 col-xs-1"></div>
</div>
{% endblock body %}

list.html.twig 和 show.html.twig 都继承了 base.html.twig,拥有了相同的页面布局

变量传递

文件路径:src/AppBundle/Controller/BlogController.php

return $this->render('blog/show.html.twig', array('title' => '博客标题', 'content' => '博客内容'));

修改show.html.twig中block body

<div class="row jumbotron">
    <div class="col-md-1 col-xs-1"></div>
    <div class="col-md-10 col-xs-10"><h1>{{ title }}</h1></div>
    <div class="col-md-1 col-xs-1"></div>
</div>
<div class="row">
    <div class="col-md-1 col-xs-1"></div>
    <div class="col-md-10 col-xs-10"><h4>{{ content }}</h4></div>
    <div class="col-md-1 col-xs-1"></div>
</div>

变量传递通过 {undefined{ }} 这样的符号来传递

传递类型

举例

读取方式

变量

array(‘title’ => ‘博客标题’)

{{ title }}

array结构

array(‘content’ => $content)

{{ content[‘time’] }}

类结构

array(‘content’ => $content)

{{ content.time }}

php原生方法

去掉 html标签方法

{{ content | strip_tags }}


流程控制

src/AppBundle/Controller/BlogController.php

        $content = array();
        $content[] = array('category' => '类别1', 'text' => '内容1');
        $content[] = array('category' => '类别2', 'text' => '内容2');
        $content[] = array('category' => '类别1', 'text' => '内容3');
        $content[] = array('category' => '类别2', 'text' => '内容4');
        return $this->render('blog/show.html.twig', array('title' => '博客标题', 'content' => $content));

修改app/Resources/views/blog/show.html.twig,改成:

{% for cont in content %}
{% if cont['category'] == '类别2' %}
<div class="row">
    <div class="col-md-1 col-xs-1"></div>
    <div class="col-md-10 col-xs-10"><h4>{{ cont['text'] }}</h4></div>
    <div class="col-md-1 col-xs-1"></div>
</div>
{% endif %}
{% endfor %}

循环遍历 : {% for cont in content %}

逻辑判断: {% if cont[‘category’] == ‘类别2’ %}

链接生成

<a href='{{ path('blog_list') }}'>{{ cont['text'] }}</a>

blog_list为router.yml里边配置的路由名称

关于Twig的详细使用可参考

  1. Twig, 灵活、快速、安全的PHP模板语言
  2. 教你成为全栈工程师(Full Stack Developer) 九-让模板文件帮你快速开发网页
相关文章
|
SQL 运维 关系型数据库
在阿里云RDS(Relational Database Service)进行跨区域迁移
在阿里云RDS(Relational Database Service)进行跨区域迁移
405 2
|
Ubuntu Linux 网络安全
使用Kali Linux虚拟机破解WiFi密码的一波三折及详细操作步骤
使用Kali Linux虚拟机破解WiFi密码的一波三折及详细操作步骤
4090 0
使用Kali Linux虚拟机破解WiFi密码的一波三折及详细操作步骤
通过matlab对比遗传算法优化前后染色体的变化情况
该程序使用MATLAB2022A实现遗传算法优化染色体的过程,通过迭代选择、交叉和变异操作,提高染色体适应度,优化解的质量,同时保持种群多样性,避免局部最优。代码展示了算法的核心流程,包括适应度计算、选择、交叉、变异等步骤,并通过图表直观展示了优化前后染色体的变化情况。
|
机器学习/深度学习 人工智能 程序员
大模型时代的思考:小心陷入ChatLLMs构建的蜜糖陷阱-基于人类反馈的间接(反向)驯化-你是否有注意到?
本文探讨了大模型基于人类反馈训练的原理及其潜在风险,特别是大模型在迎合用户需求时可能带来的“蜜糖陷阱”。通过实际案例分析,强调了理性使用大模型的重要性,提出了保持批判性思维、明确人机协作边界、提升人类判断力和创新能力等建议,旨在让大模型真正为人类服务,而不是限制人类思维。
342 4
|
存储 C++
C++ enable_shared_from_this
`std::enable_shared_from_this&lt;&gt;` 是 C++11 引入的模板类,用于安全地在类中创建 `std::shared_ptr` 实例。它解决了成员函数中直接创建 `std::shared_ptr` 导致的对象多次销毁和未定义行为问题。通过继承 `std::enable_shared_from_this&lt;&gt;` 并调用 `shared_from_this()` 方法,可以在类的成员函数中安全地获取当前对象的 `std::shared_ptr`。
|
消息中间件 缓存 NoSQL
如何设计电商行业亿级用户秒杀系统
电商行业在近十几年中,经历过大大小小的促销活动和秒杀上百次,每次做秒杀瞬时访问量会翻数十倍,甚至数百倍。对系统架构是巨大的考验,期间也曾经历过系统宕机,甚至整体雪崩。那么我们怎么设计秒杀系统,才能保证秒杀系统的高性能和稳定性,同时还要保证日常业务不受影响呢? 先看看秒杀场景特点。
如何设计电商行业亿级用户秒杀系统
|
JSON 缓存 小程序
支付宝小程序 API
本章我们将讲述支付宝小程序比较常用的几个 JSAPI,带你走进 JSAPI 的奇妙世界。
支付宝小程序 API
PHP:ThinkPHP使用Twig渲染html
PHP:ThinkPHP使用Twig渲染html
300 0
|
PHP
**PHP二维数组遍历时同时赋值
php 二维数组遍历赋值 我个人在项目中的写法: //遍历二维数组foreach($tmp_array as $key => $value){ //动态生成图片的URL $attach_url = $this->qiniu_utils->get_download_url($tmp_array[$key]['attach_save_name'] , '7vih5p.
1060 0