Php 具有场景的Yi2存在验证程序不工作
场景“withAppId”已定义,“应用程序id”的规则已链接到其中一个,表单中添加了一个活动字段,但模型未保存该字段。我做错了什么 控制器: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
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我更新了我的答案。您可以在规则和基本场景中的条件上编写,方法将自动配置场景。或者在……之间选择一些东西:)