yii2存在验证器,方案不起作用

时间:2016-02-16 14:10:33

标签: php yii2

已定义方案“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'],后,保存工作正常。

1 个答案:

答案 0 :(得分:1)

您的$cenarios[parent::SCENARIO_DEFAULT]为空。试试这个:

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

或者您可以在规则中写下on条件。文档scenario方法有一部分:

  

此方法的默认实现将返回[[rules()]]声明中找到的所有方案。名为[[SCENARIO_DEFAULT]]的特殊方案将包含[[rules()]]中找到的所有属性。每个方案都将与适用于该方案的验证规则验证的属性相关联。

注意:如果您附加此$cenarios = parent::scenarios();之类的父方案,则始终附加父规则。