Yii-fields

提供:Dev Guides
移動先:案内検索

Yii-フィールド

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

ステップ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 というカスタムフィールドを追加しました。

ステップ2 *-Postmanで、URL *http://localhost:8080/users を実行します。

実行URL

ステップ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()*メソッドによって返されることに注意してください。

ステップ4 *-このフィールドでデータを取得するには、 *http://localhost:8080/users?expand = email を実行します。

データの取得

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

*yii \ rest \ ActiveController* クラスは以下のアクションを提供します-
  • インデックス-リソースをページごとにリストします
  • 表示-指定されたリソースの詳細を返します
  • 作成-新しいリソースを作成します
  • 更新-既存のリソースを更新します
  • 削除-指定されたリソースを削除します
  • オプション-サポートされている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ステータスコードとともに例外をスローする必要があります。 Yii RESTは次のステータスを使用します-

  • 200 -OK。
  • 201 -リソースはPOST要求への応答で正常に作成されました。 Locationヘッダーには、新しく作成されたリソースを指すURLが含まれています。
  • 204 -要求は正常に処理され、応答にはコンテンツが含まれていません。
  • 304 -リソースは変更されませんでした。
  • 400 -不正なリクエスト。
  • 401 -認証に失敗しました。
  • 403 -認証されたユーザーは、指定されたAPIエンドポイントへのアクセスを許可されていません。
  • 404 -リソースが存在しません。
  • 405 -メソッドは許可されていません。
  • 415 -サポートされていないメディアタイプ。
  • 422 -データの検証に失敗しました。
  • 429 -リクエストが多すぎます。
  • 500 -内部サーバーエラー。