Yii-フィールド

オーバーライドすることによって fields() and extraFields()メソッドでは、どのデータを応答に入れることができるかを定義できます。これら2つの方法の違いは、前者はデフォルトのフィールドセットを定義し、後者は追加のフィールドを定義します。これは、エンドユーザーがを介して要求した場合に応答に含めることができます。expand クエリパラメータ。

Step 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

Step 2 − Postmanで、URLを実行します http://localhost:8080/users

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

メールフィールドはによって返されることに注意してください extraFields() 方法。

Step 4 −このフィールドでデータを取得するには、 http://localhost:8080/users?expand=email

アクションのカスタマイズ

ザ・ yii\rest\ActiveController クラスは次のアクションを提供します-

  • Index −リソースをページごとに一覧表示します

  • View −指定されたリソースの詳細を返します

  • Create −新しいリソースを作成します

  • Update −既存のリソースを更新します

  • Delete −指定されたリソースを削除します

  • Options −サポートされているHTTPメソッドを返します

上記のすべてのアクションは、actions method()で宣言されています。

「削除」および「作成」アクションを無効にするには、 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ステータスコードとともに例外をスローする必要があります。YiiRESTは次のステータスを使用します-

  • 200 −OK。

  • 201−POSTリクエストに応答してリソースが正常に作成されました。Locationヘッダーには、新しく作成されたリソースを指すURLが含まれています。

  • 204 −要求は正常に処理され、応答にはコンテンツが含まれていません。

  • 304 −リソースは変更されていません。

  • 400 −不正なリクエスト。

  • 401 −認証に失敗しました。

  • 403 −認証されたユーザーは、指定されたAPIエンドポイントへのアクセスを許可されていません。

  • 404 −リソースが存在しません。

  • 405 −メソッドは許可されていません。

  • 415 −サポートされていないメディアタイプ。

  • 422 −データ検証に失敗しました。

  • 429 −リクエストが多すぎます。

  • 500 −内部サーバーエラー。