Yii - Bidang
Dengan mengganti fields() and extraFields()metode, Anda dapat menentukan data apa yang dapat dimasukkan ke dalam respons. Perbedaan antara kedua metode ini adalah metode yang pertama menentukan kumpulan bidang default, yang harus disertakan dalam respons sementara yang terakhir mendefinisikan bidang tambahan, yang mungkin disertakan dalam respons jika pengguna akhir memintanya melaluiexpand parameter kueri.
Step 1 - Ubah MyUser modelkan seperti ini.
<?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',
];
}
}
?>
Selain bidang default: id dan nama, kami telah menambahkan bidang khusus - datetime.
Step 2 - Di Postman, jalankan URL http://localhost:8080/users.
Step 3 - Sekarang, modifikasi file MyUser modelkan seperti ini.
<?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',
];
}
}
?>
Perhatikan, bahwa bidang email dikembalikan oleh extraFields() metode.
Step 4 - Untuk mendapatkan data dengan bidang ini, jalankan http://localhost:8080/users?expand=email.
Menyesuaikan Tindakan
Itu yii\rest\ActiveController kelas menyediakan tindakan berikut -
Index - Daftar sumber halaman demi halaman
View - Menampilkan detail sumber daya yang ditentukan
Create - Membuat sumber daya baru
Update - Memperbarui sumber daya yang ada
Delete - Menghapus sumber daya yang ditentukan
Options - Mengembalikan metode HTTP yang didukung
Semua tindakan di atas dideklarasikan dalam metode tindakan ().
Untuk menonaktifkan tindakan "hapus" dan "buat", ubah UserController lewat sini -
<?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;
}
}
?>
Penanganan Error
Saat mendapatkan permintaan RESTful API, jika ada kesalahan dalam permintaan atau sesuatu yang tidak terduga terjadi di server, Anda dapat dengan mudah membuat pengecualian. Jika Anda dapat mengidentifikasi penyebab kesalahan, Anda harus membuat pengecualian bersama dengan kode status HTTP yang tepat. Yii REST menggunakan status berikut -
200 - OK.
201- Sumber daya berhasil dibuat sebagai tanggapan atas permintaan POST. Header Lokasi berisi URL yang menunjuk ke sumber daya yang baru dibuat.
204 - Permintaan berhasil ditangani dan tanggapan tidak berisi konten.
304 - Sumber daya tidak diubah.
400 - Permintaan buruk.
401 - Otentikasi gagal.
403 - Pengguna yang diautentikasi tidak diizinkan untuk mengakses titik akhir API yang ditentukan.
404 - Sumber daya tidak ada.
405 - Metode tidak diperbolehkan.
415 - Jenis media tidak didukung.
422 - Validasi data gagal.
429 - Terlalu banyak permintaan.
500 - Kesalahan server internal.