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.