1

ユーザー情報を作成・更新するため、yii2でrest APIを作成しています。以下は、モデル クラスのルール関数です。

public function rules()
    {
        return [
            [['name', 'emailId', 'contactNumber'], 'required'],
            [['name', 'emailId', 'contactNumber'], 'string', 'max' => 255]
            [['emailId', 'username', 'contactNumber'], 'unique'],
            ['status', 'default', 'value' => self::STATUS_ACTIVE],
            ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]]
        ];
    }

ここでemailId、 、usernamecontactNumberフィールドは一意である必要があると述べました。作成しようとすると、フィールドが一意かどうかをチェックしています。一意の場合はエラーがスローされ、それ以外の場合は保存されます。それは結構です。

しかし、そこで値を更新しようとすると、フィールドの特定の値が一意かどうかもチェックされます。しかし、そうであってはなりません。検証は では機能しuniqueません。そこで、 as likeupdate actionでルールを更新しました。以下の機能を確認してください。'on'=>'update'Yii 1

public function rules()
    {
        return [
            [['name', 'emailId', 'contactNumber'], 'required'],
            [['name', 'emailId', 'contactNumber'], 'string', 'max' => 255]
            [['emailId', 'username', 'contactNumber'], 'unique', 'on'=>'update'],
            ['status', 'default', 'value' => self::STATUS_ACTIVE],
            ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]]
        ];
    }

しかし、公式ドキュメントonを確認すると、特定の.xmlを確認するようなオプションはありませんaction。を使用する'on'=>'update'と、(作成中と更新中の) 両方とも、検証されていません。のせいかもしれませんon。それを残してください。ではなくunique、これらのフィールドの検証を追加する必要があります。create actionupdate action

したがって、作成アクションでのみこれらのフィールドに一意の検証を追加する方法を誰か助けてください。

ありがとう。

4

1 に答える 1

2

RESTでアクションのシナリオを設定できますActiveController

public function actions()
    {
        $actions = parent::actions();
        $actions['update']['scenario'] = 'update';
        $actions['create']['scenario'] = 'create';
        return $actions;
    }

そして、それをルールで使用します。

[['emailId', 'username', 'contactNumber'], 'unique', 'on'=>'create']

また、特定のモデル クラスのシナリオごとにアクティブな属性のリストを指定する必要があります。

public function scenarios()
    {
        $scenarios = parent::scenarios();
        $scenarios['update'] = ['type', 'title', 'description'];
        $scenarios['create'] = ['type', 'title', 'description', 'affiliate_id'];
        return $scenarios;
    }
于 2016-02-25T14:37:05.453 に答える