我正在尝试在yii2中创建一个两步形式。
这是我的SiteController.php
public function actionCreateCharacter()
{
$model = new Character();
var_dump(Yii::$app->request->post('Character'));
if ($model->load(Yii::$app->request->post())) {
$attributes=['imie','nazwisko','plec','wyznanie_id'];
if ($step1 = $model->validate($attributes)) {
//var_dump($step1);
// form inputs are valid, do something here
//var_dump(Yii::$app->request->post('Character');
return $this->render('createCharacterStep2', [
'model' => $model,
]);;
}
else {
// validation failed: $errors is an array containing error messages
$errors = $model->errors;
}
}
return $this->render('createCharacter', [
'model' => $model,
]);
}
public function actionCreateCharacterStep2()
{
$model2 = new Character();
var_dump($model);
if ($model2->load(Yii::$app->request->post())) {
var_dump(Yii::$app->request->post('Character'));
if ($model2->validate()) {
// form inputs are valid, do something here
return;
}
}
/*return $this->render('createCharacter2', [
'model' => $model,
]);*/
}
...这是我的Character.php(model + attributeLabels和tableName)
public function rules()
{
return [
[['user_id', 'imie', 'nazwisko', 'plec', 'wyznanie_id', 'avatar_src', 'avatar_svg'], 'required'],
[['user_id', 'wyznanie_id'], 'integer'],
[['avatar_svg'], 'string'],
[['imie'], 'string', 'max' => 15],
[['nazwisko'], 'string', 'max' => 20],
[['plec'], 'string', 'max' => 1],
[['avatar_src'], 'string', 'max' => 30]
];
}
我可以在$_POST
中Yii::$app->request->post()
之前访问createCharacter
- 我得到imie
,nazwisko
,plec
和wyznanie_id
但是当我在第2步发送表单时,我只发布了第2步中的数据。
如何设置步骤1 +步骤2中的发布数据?
对不起我的英文,并提前致谢。
答案 0 :(得分:0)
如果您必须为step 1
和step 2
提供表格,还有其他方法。然后保存步骤1的数据,然后保存step2数据。
如果您没有使用两个表格,那么您可以为每个步骤创建两个表单,并根据字段为每个步骤创建scenarios
。
我认为这可能会有所帮助。 You can use session also as per discussion in comments or you can use the extension array wizard
但是阵列向导扩展没有很好的记录,所以我建议你尝试我的方式,我会帮助你。
答案 1 :(得分:0)
在从step1操作渲染step2时,您始终可以将其他数据传递给控制器的操作。所以我添加了“STEPONEPOSTS”post变量,其中包含步骤1的所有帖子。检查以下内容。
public function actionCreateCharacter()
{
$model = new Character();
var_dump(Yii::$app->request->post('Character'));
if ($model->load(Yii::$app->request->post())) {
$attributes=['imie','nazwisko','plec','wyznanie_id'];
if ($step1 = $model->validate($attributes)) {
//var_dump($step1);
// form inputs are valid, do something here
//var_dump(Yii::$app->request->post('Character');
return $this->render('createCharacterStep2', [
'model' => $model,
'STEPONEPOSTS' => Yii::$app->request->post(),
]);;
}
else {
// validation failed: $errors is an array containing error messages
$errors = $model->errors;
}
}
return $this->render('createCharacter', [
'model' => $model,
]);
}
现在在第2步中,您可以将第1步发布变量视为
$STEPONEPOSTS