yii2如何将帖子数据从一个视图转移到两个视图?

时间:2015-11-27 14:12:06

标签: yii2

我正在尝试在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]
    ];
}

我可以在$_POSTYii::$app->request->post()之前访问createCharacter - 我得到imienazwiskoplecwyznanie_id

但是当我在第2步发送表单时,我只发布了第2步中的数据。

如何设置步骤1 +步骤2中的发布数据?

对不起我的英文,并提前致谢。

2 个答案:

答案 0 :(得分:0)

如果您必须为step 1step 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