Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 具有场景的Yi2存在验证程序不工作_Php_Yii2 - Fatal编程技术网

Php 具有场景的Yi2存在验证程序不工作

Php 具有场景的Yi2存在验证程序不工作,php,yii2,Php,Yii2,场景“withAppId”已定义,“应用程序id”的规则已链接到其中一个,表单中添加了一个活动字段,但模型未保存该字段。我做错了什么 控制器: public function actionIndex() { $post = Yii::$app->request->post(); $model = new Option(); $model->scenario = 'withAppId'; if ($model->load($post) &am

场景“withAppId”已定义,“应用程序id”的规则已链接到其中一个,表单中添加了一个活动字段,但模型未保存该字段。我做错了什么

控制器:

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;
}

当“=>['withAppId']”上的
'on]被删除时,
保存工作正常。

您的
$cenarios[parent::SCENARIO\u DEFAULT]
为空。试试这个:

public function scenarios()
{
    return [
        self::SCENARIO_DEFAULT => ['key', 'option', 'type', 'uploaded'],
        'withAppId' => ['key', 'application_id', 'option', 'type', 'uploaded']
    ];
}
或者,您可以在规则中的条件上写入
。doc方法有一部分:

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


注意:如果您像这样附加父场景
$cenarios=parent::scenarios()然后始终附加父规则。

谢谢,此解决方案运行良好。有没有一种方法可以自动化地狱般的
self::SCENARIO\u DEFAULT=>['key','option','type','uploaded'],
?项目中的许多模型都设置了相同的场景,并且它们的属性经常被编辑。@Mik我更新了我的答案。您可以在规则和基本
场景中的
条件上编写
,方法将自动配置场景。或者在……之间选择一些东西:)