Symfony2模版引擎使用说明手册
一、基本使用
{{ demo }}輸出一個demo變量;
?
{% func %}通常是包含一個twig函數例如 for;
舉個for循環的例子:
{% for i in 0..10 %}
<em>{{ i }}</em>
{% endfor %}
當然也可以打印對象,例:
{% for user in users %}
<span>user.username</span>
{% endfor %}
注:users是從控制器中傳來的對象參數
?
{{# #}}注釋;
{{ demo | upper }} 將demo轉化為大寫,這是一個過濾器的例子;
?
二、模版繼承
在app/Resources/views目錄下默認會有一個base.html.twig
<!DOCTYPE html> <html><head><meta charset="UTF-8" /><title>{% block title %}Welcome!{% endblock %}</title>{% block stylesheets %}{% endblock %}<link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" /></head><body>{% block body %}{% endblock %}{% block javascripts %}{% endblock %}</body> </html>然后將自己的模版文件繼承此
{% extends '::base.html.twig' %}{% block title %}My cool blog posts{% endblock %}{% block body %}{% for entry in blog_entries %}<h2>{{ entry.title }}</h2><p>{{ entry.body }}</p>{% endfor %} {% endblock %}::base.html.twig表示此文件放在app/Resources/view目錄下
注:{% extends %}必須放在第一行,當使用{% block body %}時,body這個塊中所有都被覆蓋,若想保留用parent()函數例:
{% block body %}
<h3>This is childContent</h3> ...
{{ parent() }}
{% endblock %}
三、模版不同命名方式的存儲路徑:
AcmeBlogBundle::layout.html.twig:這個語法指定了一個AcmeBlogBundle的基本模板。因為中間部分“controller”被忽略了(如Blog),模板路徑位于AcmeBlogBundle中的Resources/views/layout.html.twig
::base.html.twig:這個語法指定了一個應用程序范圍的模板或布局。注意該字符串由兩個冒號(::)開始,意思是bundle和controller部分被忽略。這意味著該模板沒有位于任何Bundle之中,因此它應該位于app/Resources/views/目錄中
四、模版包含
(1)一個模版文件中包含另外的模版文件
{% include 'AcmeArticleBundle:Article:articleDetails.html.twig' with {'article': article} %}
如果with多個參數可以{'foo':foo, 'bar':bar}
(2)一個模版文件包含另外一個控制器的結果
{% render "AcmeArticleBundle:Article:recentArticles" with {'max': 3} %}
注:兩者區別在于include是將參數article傳給了articleDetails.html.twig中的article參數,而render是將max參數傳給了recntArticle這個控制器
五、其他幫助函數
(1)根據路由名生成url鏈接:
生成相對路徑:<a href="{{ path('article_show', { 'slug': article.slug }) }}">
生成絕對路勁:<a href="{{ url('homepage') }}">Home</a>
在php模版中用<a href="<?php echo $view['router']->generate('homepage', array(), true) ?>">Home</a>(symony1中是使用url_for)
(2)連接向css、js、iamge等資源:
<img src=\'#\'" asset('images/logo.png') }}" alt="Symfony!" />
<link href="{{ asset('css/blog.css') }}" rel="stylesheet" type="text/css" />
引:asset函數的主要目的是將你的應用程序更容易移植。如果你的應用程序在你主機的根目錄下(如:http://example.com),然后被渲染的路徑將是/images/logo.png。但如果你的應用程序是在子目錄下(如:http://example.com/my_app),每個asset路徑都將渲染成帶子目錄的(如:/my_app/images/logo.png)。asset函數要小心這一點,決定如何使用你的應用程序并并據此生成正確的路徑
(3)配置和使用模版引擎:
配置和使用模板服務
在Symfony2中模板系統的核心是模板引擎。這個特定的對象負責渲染模板并返回它的內容。當你在控制器中渲染一個模板時,舉個例子,你其實是在使用模板引擎服務。如:
return $this->render('AcmeArticleBundle:Article:index.html.twig');
等同于
$engine = $this->container->get('templating'); $content = $engine->render('AcmeArticleBundle:Article:index.html.twig'); return $response = new Response($content);
模板引擎(或“服務”)被預配置成在Symfony2中自動工作。當然它可以在應用程序配置文件中配置。
# app/config/config.yml framework: # ... templating: { engines: ['twig'] }
六、模版復寫
Symfony2總是先查找位于app/Resources/BUNDLE_NAME/views/目錄的模板。如果該模板不存在,它將繼續在Bundle自己內部的Resources/views目錄中查找。所以可以將模版文件寫在app/Resources/BUNDLE_NAME/views/目錄下來覆蓋Bundle自己內部的Resources/views目錄下的模版文件。
因為Symfony2框架自身也是一個Bundle,核心模板也可以用同樣的方式覆寫。舉個例子,核心的FrameworkBundle包含著大量的“異常”和“錯誤”模板。要覆寫它們,可以將它們從FrameworkBundle的Resources/views/Exception目錄中拷貝到,正如你所想,app/Resources/FrameworkBundle/views/Exception目錄中。(這個比較實用)
?
七、輸出轉義
為了防止XSS攻擊需要轉義輸出,在symfony2 Twig模版引擎中輸出轉義是默認開啟的,php模版引擎不開啟
在某些案例中,當正在渲染一個被信任變量和不能被清理的標識時,你需要取消輸出清理。假設管理用戶可以寫包含HTML代碼的文章。缺省狀態下,Twig將清理文章內容。要正常地渲染它,添加raw過濾器:{{ article.body | raw }}。
?
為了創建包含格式參數的鏈接,在參數的哈希數組中包括_format關鍵詞:
<a href="{{ path('article_show', {'id': 123, '_format': 'pdf'}) }}">This is PDF</a>?
轉載于:https://www.cnblogs.com/orlion/p/4782263.html
總結
以上是生活随笔為你收集整理的Symfony2模版引擎使用说明手册的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu 配置静态IP及DNS
- 下一篇: strcpy 函数的实现