yii2.0框架深入解析學習

yii2.0框架深入解析學習

PK1928-yii2.0框架深入解析(實戰篇)

學習要趁早,點滴記錄,學習就是進步!

請聯絡本文作者或者關注公眾號:菜鳥奮鬥 或Q群:702101215

隨筆背景:在很多時候,很多入門不久的朋友都會問我:我是從其他語言轉到程式開發的,有沒有一些基礎性的資料給我們學習學習呢,你的框架感覺一下太大了,希望有個循序漸進的教程或者視訊來學習就好了。對於學習有困難不知道如何提升自己可以加扣:1225462853進行交流得到幫助,獲取學習資料.

PK1928-yii2.0框架深入解析(實戰篇)

下載地址:http://pan.baidu.com/s/1jI05TPW

你可以使用 formatter application component 來格式化資料。 預設 fomatter 由 yii\i18n\Formatter 來實現,這個元件提供了一系列關於日期/時間,數字,貨幣等的格式化方法。 使用方法如下:

$formatter = \Yii::$app->formatter;
// output: January 1, 2014
echo $formatter->asDate('2014-01-01', 'long');
// output: 12.50%
echo $formatter->asPercent(0.125, 2);
// output: <a href="mailto:[email protected]">[email protected]</a>
echo $formatter->asEmail('[email protected]'); 
// output: Yes
echo $formatter->asBoolean(true); 
// it also handles display of null values:
// output: (Not set)
echo $formatter->asDate(null); 

頁面快取指的是在伺服器端快取整個頁面的內容。 隨後當同一個頁面被請求時,內容將從快取中取出,而不是重新生成。

頁面快取由 yii\filters\PageCache 類提供支援,該類是一個過濾器。 它可以像這樣在控制器類中使用:

public function behaviors()
{
return [
[
'class' => 'yii\filters\PageCache',
'only' => ['index'],
'duration' => 60,
'variations' => [
\Yii::$app->language,
],
'dependency' => [
'class' => 'yii\caching\DbDependency',
'sql' => 'SELECT COUNT(*) FROM post',
],
],
];
}

上述程式碼表示頁面快取只在 index 操作時啟用,頁面內容最多被快取 60 秒, 會隨著當前應用的語言更改而變化。 如果文章總數發生變化則快取的頁面會失效。

如你所見,頁面快取和片段快取極其相似。 它們都支援 durationdependenciesvariations 和 enabled 配置選項。 它們的主要區別是頁面快取是由過濾器實現,而片段快取則是一個小部件

你可以在使用頁面快取的同時, 使用片段快取動態內容

當處理一個 RESTful API 請求時, 一個應用程式通常需要如下步驟 來處理響應格式:

  1. 確定可能影響響應格式的各種因素, 例如媒介型別, 語言, 版本, 等等。 這個過程也被稱為 content negotiation
  2. 資源物件轉換為陣列, 如在 Resources 部分中所描述的。 通過 yii\rest\Serializer 來完成。
  3. 通過內容協商步驟將陣列轉換成字串。 response formatters 通過 response 應用程式 元件來註冊完成。

內容協商

Yii 提供了通過 yii\filters\ContentNegotiator 過濾器支援內容協商。RESTful API 基於 控制器類 yii\rest\Controller 在 contentNegotiator 下配備這個過濾器。 檔案管理器提供了涉及的響應格式和語言。 例如, 如果一個 RESTful API 請求中包含以下 header,

$ curl -i -H "Accept: application/json; q=1.0, */*; q=0.1" "http://localhost/users"
HTTP/1.1 200 OK
Date: Sun, 02 Mar 2014 05:31:43 GMT
Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.20 mod_ssl/2.2.26 OpenSSL/0.9.8y
X-Powered-By: PHP/5.4.20
X-Pagination-Total-Count: 1000
X-Pagination-Page-Count: 50
X-Pagination-Current-Page: 1
X-Pagination-Per-Page: 20
Link: <http://localhost/users?page=1>; rel=self,
<http://localhost/users?page=2>; rel=next,
<http://localhost/users?page=50>; rel=last
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8
[
{
"id": 1,
...
},
{
"id": 2,
...
},
...
]

幕後,執行一個 RESTful API 控制器動作之前,yii\filters\ContentNegotiator filter 將檢查 Accept HTTP header 在請求時和配置 response format 為 'json'。 之後的動作被執行並返回得到的資源物件或集合, yii\rest\Serializer 將結果轉換成一個陣列。最後,yii\web\JsonResponseFormatter 該陣列將序列化為JSON字串,並將其包括在響應主體。

預設, RESTful APIs 同時支援JSON和XML格式。為了支援新的格式,你應該 在 contentNegotiator 過濾器中配置 formats 屬性, 類似如下 API 控制器類:

use yii\web\Response;
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['contentNegotiator']['formats']['text/html'] = Response::FORMAT_HTML;
return $behaviors;
}