PHP(Yii)通过表单传递变量来控制

时间:2016-01-08 15:49:31

标签: php yii

我的视图$models中有一个变量,我想将其传递给我的控制器以获取我正在使用提交按钮调用的函数。

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

如何从控制器中的函数访问$models变量。

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

2 个答案:

答案 0 :(得分:1)

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

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

在PHP中,您无法使用echo $ arrayVar显示数组。

对于您的具体问题,我假设$ models是一个模型数组。不要在表单中传递整个模型的定义,只需传递其主键ID即可。在您的下一个操作中,只需使用YourMode :: model() - &gt; 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)
?>

答案 1 :(得分:-2)

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

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

然后随意使用它,为了在控制器中存储变量,你可能需要在你的类中添加一个变量。

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

根据您所写的内容,我认为您应该使用Sessions存储该数据。