日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Symfony2模版引擎使用说明手册

發布時間:2024/1/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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模版引擎使用说明手册的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。