Yii - Trường
Bằng cách ghi đè fields() and extraFields(), bạn có thể xác định dữ liệu nào có thể được đưa vào một phản hồi. Sự khác biệt giữa hai phương pháp này là phương pháp trước xác định tập hợp trường mặc định, sẽ được bao gồm trong phản hồi trong khi phương pháp sau xác định các trường bổ sung, có thể được bao gồm trong phản hồi nếu người dùng cuối yêu cầu chúng quaexpand tham số truy vấn.
Step 1 - Sửa đổi MyUser mô hình theo cách này.
<?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',
];
}
}
?>
Bên cạnh các trường mặc định: id và tên, chúng tôi đã thêm một trường tùy chỉnh - datetime.
Step 2 - Trong Postman, chạy URL http://localhost:8080/users.
Step 3 - Bây giờ, sửa đổi MyUser mô hình theo cách này.
<?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',
];
}
}
?>
Lưu ý rằng trường email được trả về bởi extraFields() phương pháp.
Step 4 - Để lấy dữ liệu với trường này, hãy chạy http://localhost:8080/users?expand=email.
Tùy chỉnh hành động
Các yii\rest\ActiveController lớp cung cấp các hành động sau:
Index - Liệt kê tài nguyên từng trang
View - Trả về chi tiết của một tài nguyên cụ thể
Create - Tạo một nguồn tài nguyên mới
Update - Cập nhật tài nguyên hiện có
Delete - Xóa tài nguyên được chỉ định
Options - Trả về các phương thức HTTP được hỗ trợ
Tất cả các hành động trên được khai báo trong phương thức hành động ().
Để tắt các hành động “xóa” và “tạo”, hãy sửa đổi UserController lối này -
<?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;
}
}
?>
Xử lý lỗi
Khi nhận được yêu cầu RESTful API, nếu có lỗi trong yêu cầu hoặc điều gì đó không mong muốn xảy ra trên máy chủ, bạn có thể chỉ cần đưa ra một ngoại lệ. Nếu bạn có thể xác định nguyên nhân của lỗi, bạn nên đưa ra một ngoại lệ cùng với mã trạng thái HTTP thích hợp. Yii REST sử dụng các trạng thái sau:
200 - Được rồi.
201- Một tài nguyên đã được tạo thành công theo yêu cầu ĐĂNG. Tiêu đề Vị trí chứa URL trỏ đến tài nguyên mới được tạo.
204 - Yêu cầu đã được xử lý thành công và phản hồi không chứa nội dung.
304 - Tài nguyên không được sửa đổi.
400 - Yêu cầu tồi.
401 - Xác thực không thành công.
403 - Người dùng được xác thực không được phép truy cập vào điểm cuối API được chỉ định.
404 - Tài nguyên không tồn tại.
405 - Phương pháp không được phép.
415 - Loại phương tiện không được hỗ trợ.
422 - Xác thực dữ liệu không thành công.
429 - Quá nhiều yêu cầu.
500 - Lỗi máy chủ nội bộ.