已定义方案“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'],
后,保存工作正常。
答案 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();
之类的父方案,则始终附加父规则。