symfony框架Twig模板语言的使用

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

模板继承

模板路径: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>

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

image.png

流程控制

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里边配置的路由名称


常用模板语法


// 默认值
{{ var|default('var is not defined') }}

关于Twig的详细使用可参考

相关文章
|
8月前
|
运维 前端开发 Serverless
《无需操心服务器!Serverless让前端开发自动“开挂”》
Serverless技术为前端开发带来了免运维和自动扩展的新模式。它包含BaaS(后端即服务)和FaaS(函数即服务),让开发者无需关注服务器管理,专注于业务逻辑。通过云服务商的专业运维能力,解决了传统架构中硬件故障、资源浪费等问题,同时自动扩展机制确保应用在流量高峰时稳定运行。尽管存在冷启动和调试复杂等挑战,但其高效性和灵活性已助力众多项目成功落地,未来有望成为前端开发的主流趋势。
110 13
|
API
使用ModelScope平台进行模型验证时
【2月更文挑战第9天】使用ModelScope平台进行模型验证时
480 4
|
Python Windows
ping命令无法使用~弹出ping.py
ping命令无法使用~弹出ping.py
276 0
|
测试技术 Linux
linux 服务器运行jmeter 进行服务性能压测
linux 服务器运行jmeter 进行服务性能压测
1123 0
|
存储 负载均衡 网络协议
高性能网络编程 - 关于单台服务器并发TCP连接数理论值的讨论
高性能网络编程 - 关于单台服务器并发TCP连接数理论值的讨论
428 0
|
Java 测试技术 微服务
这可能是2024年把微服务讲的最全了:SpringBoot+Cloud+Docker
最近几年,微服务可谓是大行其道。在业务模型不完善,超大规模流量的冲击的情况下,许多企业纷纷抛弃了传统的单体架构,拥抱微服务。这种模式具备独立开发、独立部署、可扩展性、可重用性的优点的同时,也带来这样一个问题:开发、运维的复杂性提高。有人感觉微服务越做越不方便管理。
|
存储 运维 安全
首个!阿里云完成中国信通院全密态数据库产品评测
阿里云PolarDB完成中国信通院全密态数据库产品评测
|
安全 Cloud Native 分布式数据库
【笔记】用户指南—账号和安全—三权分立—开启或关闭三权分立
您可以在控制台上开启或关闭三权分立模式。开启后,高权限账号自动转换为系统管理员账号,同时还需创建安全管理员账号和审计管理员账号。本文介绍开启或关闭三权分立的相关操作步骤。
304 0
|
SQL 存储 缓存
【巡检问题分析与最佳实践】RDS SQL Server CPU高问题
CPU使用率过高问题是RDS SQL Server用户遇到的性能问题中较常见的一类。当RDS SQL Server实例的CPU使用率持续较高时,很容易导致数据库访问卡慢的情况,例如一些很简单的查询请求的响应时间也会很久甚至超时失败。
【巡检问题分析与最佳实践】RDS SQL Server CPU高问题