1. 程式人生 > >PHP之Yii框架學習總結

PHP之Yii框架學習總結

Yii 是一個高效能的,適用於開發 WEB2.0 應用的 PHP 框架。
Yii 自帶了豐富的功能 ,包括:

  • 模型-檢視-控制器(MVC)設計模式: Yii在WEB程式設計中採用這一成熟的技術從而可以更好的將邏輯層和表現層分開
  • 與jQuery整合:作為最流行的JavaScript框架之一,jQuery可以編寫高效而靈活的JavaScript介面。
  • 分層快取方案: Yii支援資料快取,頁面快取,片段快取和動態內容。快取的儲存介質,可以輕鬆地更改而不觸及應用程式程式碼。
  • 錯誤處理和日誌記錄:錯誤的處理很好的呈現出來,日誌資訊可以分類,過濾並分配到不同的位置。
  • 安全: Yii配備了許多安全的措施,以幫助安全的Web應用程式,以防止網路攻擊。這些措施包括跨站點指令碼(XSS)預防,跨站點請求偽造(CSRF)預防,Cookie篡改預防等。
  • 自動程式碼生成: Yii提供了可以自動生成的程式碼的工具,根據你的需要,例如生成一個程式骨架,CRUD應用等等。
  • 完全面向物件: Yii框架堅持嚴格的面向物件程式設計正規化。它沒有定義任何全域性函式或變數。而且,它定義的類層次結構允許最大的可重用性和定製。
  • 詳細的文件:每一個單一的方法或屬性都非常清楚的記錄著。同時提供了一個全面的教程和一些新手教程。

Yii的優勢

Yii容易學習和使用。只需要知道PHP和麵向物件程式設計,便可以很快上手,而不必事先去學習一種新的架構或者模板語言。
用Yii的開發速度非常之快,除框架本身之外,需要為應用所寫的編碼極少。造就了Yii是最高效的開發框架之一。

  • Yii 具有高度的可重用性和可擴充套件性,是純粹的面向物件。
  • Yii中的一切都是獨立的可被配置,可重用,可擴充套件的元件。
  • 更重要的是Yii有著越來越多的擴充套件庫。主要由使用者貢獻出的元件組成,這可能有助於大大減少開發時間。

Sessions 和 Cookies

Sessions 和 cookies 允許資料在多次請求中保持, 在純PHP中,可以分別使用全域性變數$_SESSION$_COOKIE 來訪問,Yii將session和cookie封裝成物件並增加一些功能, 可通過面向物件方式訪問它們。

HTTP 快取

除了伺服器端快取外, Web 應用還可以利用客戶端快取(HTTP 快取)去節省相同頁面內容的生成和傳輸時間。
通過配置 yii\filters\HttpCache 過濾器,控制器操作渲染的內容就能快取在客戶端。

快取有關的 HTTP 頭

  • Last-Modified

使用時間戳標明頁面自上次客戶端快取後是否被修改過。

通過配置 yii\filters\HttpCache::lastModified 屬性向客戶端傳送 Last-Modified 頭。返回的是頁面修改時的 Unix 時間戳。
Demo

public function behaviors()
{
    return [
        [
            'class' => 'yii\filters\HttpCache',
            'only' => ['index'],
            'lastModified' => function ($action, $params) {
                $q = new \yii\db\Query();
                return $q->from('post')->max('updated_at');
            },
        ],
    ];
}

上述程式碼表明 HTTP 快取只在 index 操作時啟用。它會基於頁面最後修改時間生成一個 Last-Modified HTTP 頭。當瀏覽器第一次訪問 index 頁時,伺服器將會生成頁面併發送至客戶端瀏覽器。之後客戶端瀏覽器在頁面沒被修改期間訪問該頁,伺服器將不會重新生成頁面,瀏覽器會使用之前客戶端快取下來的內容。因此服務端渲染和內容傳輸都將省去。

  • ETag 頭

“Entity Tag”(實體標籤,簡稱 ETag)使用一個雜湊值表示頁面內容。如果頁面被修改過,雜湊值也會隨之改變。通過對比客戶端的雜湊值和伺服器端生成的雜湊值,瀏覽器就能判斷頁面是否被修改過,進而決定是否應該重新傳輸內容。
通過配置 yii\filters\HttpCache::etagSeed 屬性向客戶端傳送 ETag 頭。返回的是一段種子字元用來生成 ETag 雜湊值。
Demo

public function behaviors()
{
    return [
        [
            'class' => 'yii\filters\HttpCache',
            'only' => ['view'],
            'etagSeed' => function ($action, $params) {
                $post = $this->findModel(\Yii::$app->request->get('id'));
                return serialize([$post->title, $post->content]);
            },
        ],
    ];
}

上述程式碼表明 HTTP 快取只在 view 操作時啟用。它會基於使用者請求的標題和內容生成一個 ETag HTTP 頭。當瀏覽器第一次訪問 view 頁時,伺服器將會生成頁面併發送至客戶端瀏覽器。之後客戶端瀏覽器標題和內容沒被修改在期間訪問該頁,伺服器將不會重新生成頁面,瀏覽器會使用之前客戶端快取下來的內容。因此服務端渲染和內容傳輸都將省去。

  • Cache-Control 頭

Cache-Control 頭指定了頁面的常規快取策略。可以通過配置 yii\filters\HttpCache::cacheControlHeader 屬性發送相應的頭資訊。
預設傳送以下頭:

Cache-Control: public, max-age=3600