使用yii 2我想将3个变量从视图传递到另一个视图。在我的控制器中,我创建了一个动作,获取这3个变量,然后打开一个视图,但在“开始”视图中,我无法编写工作表单:/
这是我的首发观点:
<?= Html::beginForm(['preview', 'type'=>0, 'start'=>'start', 'end'=>'end'], 'post', ['enctype' => 'multipart/form-data']) ?>
<?=
\yii\widgets\MaskedInput::widget([
'name' => 'start',
'clientOptions' => ['placeholder' => 'GG-MM-AAAA'],
'mask' => '99-99-9999',
])
?>
<?=
\yii\widgets\MaskedInput::widget([
'name' => 'end',
'clientOptions' => ['placeholder' => 'GG-MM-AAAA'],
'mask' => '99-99-9999',
])
?>
<?= Html::submitButton('Go', ['class' => 'submit']) ?>
<?= Html::endForm() ?>
这是我的行动:
public function actionPreview($type, $start, $end)
{
return $this->redirect(['preview', 'type' => $type, 'start'=>$start, 'end'=>$end]);
}
但是,当我按下“Go”按钮时,Yii 2返回
错误请求(#400) - 缺少必需参数:开始,结束
我也试过这个动作:
public function actionPreview() //$type, $start, $end
{
$post = Yii::$app->request->post();
$type = $post['type'];
$start = $post['start'];
$end = $post['end'];
return $this->redirect(['preview', 'type' => $type, 'start'=>$start, 'end'=>$end]);
}
但它会返回此错误:
未定义索引:键入/ start / end
有什么想法吗?
------- -------- UPDATE
现在渲染工作,但我无法从起始视图中读取参数。
myController的:
public function actionPreview() //$type, $start, $end
{
$type = Yii::$app->request->get('type');
$start = Yii::$app->request->get('start');
$end = Yii::$app->request->get('end');
return $this->render('preview', [
'type' => $type, 'start'=>$start, 'end'=>$end
]);
}
我的视图中的表单与您在上面看到的相同,但它会将通用参数发送到下一页(简而言之,它不会读取输入字段):
开始=启动
端=端
答案 0 :(得分:1)
我试过这个怀疑
<?php
$start = '1234560123';
?>
<?= Html::beginForm(['preview', ], 'post', ['enctype' => 'multipart/form-data']) ?>
<?= \yii\widgets\MaskedInput::widget([
'name' => 'start',
'value' => $start,
'clientOptions' => ['placeholder' => 'GG-MM-AAAA'],
'mask' => '99-99-9999',
])
?>
<?= Html::submitButton('Go', ['class' => 'submit']) ?>
<?= Html::endForm() ?>
并且工作
如果您有错误未定义变量,那么控制器中存在传递变量的问题。
对于正确的视图记忆,变量中的数据必须与掩码匹配...
对于预览,你应该使用post而不是
public function actionPreview() //$type, $start, $end
{
$type = Yii::$app->request->post('type');
$start = Yii::$app->request->post('start');
$end = Yii::$app->request->post('end');
return $this->render('preview', [
'type' => $type, 'start'=>$start, 'end'=>$end
]);
}