PHP(Yii)通过窗体将变量传递给控制器


PHP (Yii) Passing variable to controlle via form

我的视图$models中有一个变量,我想将它传递给我的控制器,用于我使用提交按钮调用的函数。

<?php echo CHtml::beginForm('', 'post');?>
    <fieldset>
        <?php echo CHtml::submitButton('Confirm', array('name'=>'confirm', 'class'=>'btn btn-danger')); ?>
    </fieldset>
<?php echo CHtml::endForm(); ?>

如何从控制器中的函数访问CCD_ 2变量。

我不完全确定这是如何工作的,我本以为我可以只使用$_POST['models'],但它说它是一个未定义的变量(尽管我可以在页面上var_dump,但它肯定不是),所以我认为我只是试图错误地访问它或没有正确地提交它。

这是一个html表单提交和php语法问题,但不是yii特有的。

无论你使用什么框架,即使是在纯静态html中,表单提交的基本思想也是一样的:如果你想将数据发送到带有表单的页面,你需要将这些数据放在你的表单中,要么作为最终用户可以输入或选择的表单输入(文本输入、下拉框、单选框和复选框),要么作为隐藏输入。Page2不在乎是否在Page1上设置了$models。您需要将数据发送到第2页。

在PHP中,不能显示带有echo$arrayVar的数组。

对于您的特定问题,我假设$models是一组模型。不要在表单中传递整个模型的定义,只传递它们的主键id。在您的下一个操作中,只需使用YourMode::model()->findByPk()取回这些模型。我认为你可以用两种方法:

<?php
// Idea 1 (untested code)
// Convert an array of ids to a string
$tmp = array();
foreach($models as $model){
    $tmp[] = $model->yourPrimaryKey;
}
echo '<input type="hidden" name="whateveryourparamis" value="'.CHtml::encode( implode('|',$tmp)).'">';
// $whateveryourparamis will be a string like: "47|388|638|877". Use explode() to convert it to an array
// Your could also use json_encode/json_decode instead of implode/explode

// Idea 2 (untested code)
// Pass an array of ids (yeah, this is possible)
foreach($models as $model){
    echo '<input type="hidden" name="whateveryourparamis[]" value="'.CHtml::encode($model->yourPrimaryKey).'">';
}
// $whateveryourparamis will be an array like: array(47, 388, 638, 877)
?>

我想这不是实现您想要的目标的最佳方式,但您可以始终通过以下方式访问控制器:

$controller = Yii::app()->controller;

然后,您可以随心所欲地使用它,为了在控制器中存储变量,您可能需要向类中添加一个变量。

另一种变体是使用CStatePersisterhttp://www.yiiframework.com/doc/api/1.1/CStatePersister或者您也可以直接写入$_SESSION。。

根据您所写的内容,我想您应该使用Sessions来存储这些数据。