簡體   English   中英

yii2與場景存在驗證器不起作用

[英]yii2 exist validator with scenario does not work

定義了方案“ withAppId”,並將“ application_id”的規則鏈接到其中,向表單添加了ActiveField,但模型未保存該字段。 我做錯了什么?

控制器:

public function actionIndex()
{
    $post = Yii::$app->request->post();
    $model = new Option();
    $model->scenario = 'withAppId';
    if ($model->load($post) && $model->save()) {
        Yii::$app->session->addFlash('success', 'Запись успешно сохранена.');
        return $this->redirect(['index']);
    } else {
        //form rendering
    }
}

模型:

public function rules()
{
    return [
        ['key', 'trim'],
        ['key', 'required'],
        ['key', 'string', 'max' => 100],

        ['option', 'string', 'max' => 255],

        ['type', 'required'],
        ['type', 'in', 'range' => array_keys(self::$TYPES)],

        ['uploaded', 'image', 
            'extensions'    => 'png, jpg, jpeg, gif',
            'maxWidth'      => 1000,
            'maxHeight'     => 1000,
            'maxSize'       => 1024*1024,
        ],

        ['application_id', 'exist',
            'targetClass' => Application::className(),
            'on'          => ['withAppId'],
        ],
    ];
}

public function scenarios()
{
    $cenarios = parent::scenarios();
    $cenarios['withAppId'] = $cenarios[parent::SCENARIO_DEFAULT];
    return $cenarios;
}

'on' => ['withAppId'],被刪除時,保存工作正常。

您的$cenarios[parent::SCENARIO_DEFAULT]為空。 嘗試這個:

public function scenarios()
{
    return [
        self::SCENARIO_DEFAULT => ['key', 'option', 'type', 'uploaded'],
        'withAppId' => ['key', 'application_id', 'option', 'type', 'uploaded']
    ];
}

或者您可以on條件寫規則。 doc 方案方法有一部分:

此方法的默認實現將返回在[[rules()]]聲明中找到的所有方案。 名為[[SCENARIO_DEFAULT]]的特殊情況將包含在[[rules()]]中找到的所有屬性。 每個方案都將與適用於該方案的驗證規則所驗證的屬性相關聯。

注意:如果您附加父場景,例如: $cenarios = parent::scenarios(); 然后始終附加父規則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM