Yii - Alanlar

Geçersiz kılarak fields() and extraFields()yöntemleri, bir yanıta hangi verilerin konulabileceğini tanımlayabilirsiniz. Bu iki yöntem arasındaki fark, birincisinin yanıta dahil edilmesi gereken varsayılan alan kümesini tanımlaması, ikincisinin ise ek alanları tanımlamasıdır; bu, bir son kullanıcı aracılığıyla bunları isterse yanıta dahil edilebilir.expand sorgu parametresi.

Step 1 - Değiştirin MyUser bu şekilde modelleyin.

<?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',
         ];
      }
   }
?>

Varsayılan alanların yanı sıra: id ve ad, özel bir alan ekledik - datetime.

Step 2 - Postman'da URL'yi çalıştırın http://localhost:8080/users.

Step 3 - Şimdi değiştirin MyUser bu şekilde modelleyin.

<?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',
         ];
      }
   } 
?>

E-posta alanının şu kullanıcı tarafından döndürüldüğüne dikkat edin. extraFields() yöntem.

Step 4 - Bu alanla veri almak için çalıştırın http://localhost:8080/users?expand=email.

Eylemleri Özelleştirme

yii\rest\ActiveController sınıf aşağıdaki eylemleri sağlar -

  • Index - Kaynakları sayfa sayfa listeler

  • View - Belirtilen bir kaynağın ayrıntılarını verir

  • Create - Yeni bir kaynak oluşturur

  • Update - Mevcut bir kaynağı günceller

  • Delete - Belirtilen kaynağı siler

  • Options - Desteklenen HTTP yöntemlerini döndürür

Yukarıdaki tüm eylemler, actions method () içinde bildirilir.

"Sil" ve "oluştur" eylemlerini devre dışı bırakmak için, UserController bu şekilde -

<?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;
      }
   }
?>

Hataları Yönetme

Bir RESTful API isteği alırken, istekte bir hata varsa veya sunucuda beklenmedik bir şey olursa, bir istisna atabilirsiniz. Hatanın nedenini belirleyebiliyorsanız, uygun bir HTTP durum koduyla birlikte bir istisna atmalısınız. Yii REST aşağıdaki durumları kullanır -

  • 200 - Tamam.

  • 201- POST isteğine yanıt olarak bir kaynak başarıyla oluşturuldu. Konum başlığı, yeni oluşturulan kaynağa işaret eden URL'yi içerir.

  • 204 - İstek başarıyla işlendi ve yanıt içerik içermiyor.

  • 304 - Kaynak değiştirilmedi.

  • 400 - Kötü istek.

  • 401 - Kimlik doğrulama başarısız oldu.

  • 403 - Kimliği doğrulanan kullanıcının belirtilen API uç noktasına erişmesine izin verilmez.

  • 404 - Kaynak mevcut değil.

  • 405 - Yönteme izin verilmiyor.

  • 415 - Desteklenmeyen ortam türü.

  • 422 - Veri doğrulama başarısız oldu.

  • 429 - Çok fazla istek.

  • 500 - Dahili sunucu hatası.