- Yii 教程
- Yii - 首頁
- Yii - 概述
- Yii - 安裝
- Yii - 建立頁面
- Yii - 應用程式結構
- Yii - 入口指令碼
- Yii - 控制器
- Yii - 使用控制器
- Yii - 使用操作
- Yii - 模型
- Yii - 小部件
- Yii - 模組
- Yii - 檢視
- Yii - 佈局
- Yii - 資源
- Yii - 資源轉換
- Yii - 擴充套件
- Yii - 建立擴充套件
- Yii - HTTP 請求
- Yii - 響應
- Yii - URL 格式
- Yii - URL 路由
- Yii - URL 規則
- Yii - HTML 表單
- Yii - 驗證
- Yii - 特設驗證
- Yii - AJAX 驗證
- Yii - 會話
- Yii - 使用快閃記憶體資料
- Yii - Cookie
- Yii - 使用 Cookie
- Yii - 檔案上傳
- Yii - 格式化
- Yii - 分頁
- Yii - 排序
- Yii - 屬性
- Yii - 資料提供者
- Yii - 資料小部件
- Yii - ListView 小部件
- Yii - GridView 小部件
- Yii - 事件
- Yii - 建立事件
- Yii - 行為
- Yii - 建立行為
- Yii - 配置
- Yii - 依賴注入
- Yii - 資料庫訪問
- Yii - 資料訪問物件
- Yii - 查詢生成器
- Yii - Active Record
- Yii - 資料庫遷移
- Yii - 主題
- Yii - RESTful API
- Yii - RESTful API 實戰
- Yii - 欄位
- Yii - 測試
- Yii - 快取
- Yii - 碎片快取
- Yii - 別名
- Yii - 日誌記錄
- Yii - 錯誤處理
- Yii - 認證
- Yii - 授權
- Yii - 本地化
- Yii - Gii
- Gii – 建立模型
- Gii – 生成控制器
- Gii – 生成模組
- Yii 有用資源
- Yii - 快速指南
- Yii - 有用資源
- Yii - 討論
Yii - 欄位
透過覆蓋fields() 和 extraFields() 方法,您可以定義哪些資料可以放入響應中。這兩種方法之間的區別在於,前者定義了預設欄位集,這些欄位集應包含在響應中,而後者定義了其他欄位,如果終端使用者透過expand 查詢引數請求這些欄位,則可以將這些欄位包含在響應中。
步驟 1 - 以這種方式修改MyUser 模型。
<?php
namespace app\models;
use app\components\UppercaseBehavior;
use Yii;
/**
* This is the model class for table "user".
*@property integer $id
* @property string $name
* @property string $email
*/
class MyUser extends \yii\db\ActiveRecord {
public function fields() {
return [
'id',
'name',
//PHP callback
'datetime' => function($model) {
return date("d:m:Y H:i:s");
}
];
}
/**
* @inheritdoc
*/
public static function tableName() {
return 'user';
}
/**
* @inheritdoc
*/
public function rules() {
return [
[['name', 'email'], 'string', 'max' => 255]
];
}
/**
* @inheritdoc
*/
public function attributeLabels() {
return [
'id' => 'ID',
'name' => 'Name',
'email' => 'Email',
];
}
}
?>
除了預設欄位:id 和 name 之外,我們還添加了一個自定義欄位 - datetime。
步驟 2 - 在 Postman 中,執行 URL https://:8080/users。
步驟 3 - 現在,以這種方式修改MyUser 模型。
<?php
namespace app\models;
use app\components\UppercaseBehavior;
use Yii;
/**
* This is the model class for table "user".
*
* @property integer $id
* @property string $name
* @property string $email
*/
class MyUser extends \yii\db\ActiveRecord {
public function fields() {
return [
'id',
'name',
];
}
public function extraFields() {
return ['email'];
}
/**
* @inheritdoc
*/
public static function tableName() {
return 'user';
}
/**
* @inheritdoc
*/
public function rules() {
return [
[['name', 'email'], 'string', 'max' => 255]
];
}
/**
* @inheritdoc
*/
public function attributeLabels() {
return [
'id' => 'ID',
'name' => 'Name',
'email' => 'Email',
];
}
}
?>
請注意,email 欄位由extraFields() 方法返回。
步驟 4 - 要獲取包含此欄位的資料,請執行https://:8080/users?expand=email。
自定義操作
yii\rest\ActiveController 類提供以下操作 -
Index - 分頁列出資源
View - 返回指定資源的詳細資訊
Create - 建立新的資源
Update - 更新現有資源
Delete - 刪除指定資源
Options - 返回支援的 HTTP 方法
所有上述操作都在 actions 方法() 中宣告。
要停用“delete”和“create”操作,請以這種方式修改UserController -
<?php
namespace app\controllers;
use yii\rest\ActiveController;
class UserController extends ActiveController {
public $modelClass = 'app\models\MyUser';
public function actions() {
$actions = parent::actions();
// disable the "delete" and "create" actions
unset($actions['delete'], $actions['create']);
return $actions;
}
}
?>
處理錯誤
在獲取 RESTful API 請求時,如果請求中存在錯誤或伺服器上發生意外情況,您可以簡單地丟擲異常。如果您可以識別錯誤的原因,則應丟擲異常以及相應的 HTTP 狀態程式碼。Yii REST 使用以下狀態 -
200 - OK。
201 - 響應 POST 請求成功建立了資源。Location 標頭包含指向新建立資源的 URL。
204 - 請求已成功處理,響應不包含內容。
304 - 資源未修改。
400 - 錯誤請求。
401 - 身份驗證失敗。
403 - 已認證的使用者無權訪問指定的 API 端點。
404 - 資源不存在。
405 - 方法不允許。
415 - 不支援的媒體型別。
422 - 資料驗證失敗。
429 - 請求過多。
500 - 內部伺服器錯誤。