处理yii框架中控制器上checkboxlist的输入

时间:2014-08-22 11:29:00

标签: php ajax yii checkboxlist

我正在创建一个复选框列表,我想在用户选中该框时计算价格。

我在视图部分

中创建了一个复选框列表
<?php echo CHtml::checkboxList('cblist_addons','',
CHtml::listData(Addon::model()->findAll("car_type_id=1"),'id','concatenedLabel'),
array('separator'=>'','template'=>'{label}{input}','class'=>'cblist_addons'));?> 

这个工作正常。 但是在控制器部分,我想生成一个像[a,b,c]

这样的字符串
$str_addons = "";

if(isset($_POST['cblist_addons']) && !empty($_POST['cblist_addons']) ) {
foreach($_POST['cblist_addons'] as $addon) {
if ($addon.checked){
    $str_addons .= $addon.val(). ', ';  
}}
$str_addons = substr($str_addons, 0, -2); //to del the last comma
}


$criteria = new CDbCriteria();              
$criteria->select = 'price'; 
if ($str_addons != ''){
$criteria->condition = 'id in (:cblist_addons)';
$criteria->params = array(':cblist_addons'=> $str_addons) ;     
}
else{
$criteria->condition = 'id in (1,2,3,4) ';  //the path go into this else part with no error
}
$model_addons = Addon::model()-> findAll ($criteria);

似乎我无法从视图部分获取对象。 我是yii和php的新手 我几天就试图解决这个问题,所以我希望有人能帮助我。

让我解释一下。 我正在创建一个复选框列表,当我按下按钮或选中复选框时,将调用ajax函数并计算价格并显示在视图部分中。

1 个答案:

答案 0 :(得分:1)

您无需像这样检查

($addon.checked)

因为$_POST['cblist_addons']只会包含您检查过的值。

所以你应该改变这个

if(isset($_POST['cblist_addons']) && !empty($_POST['cblist_addons']) ) {
foreach($_POST['cblist_addons'] as $addon) {
if ($addon.checked){
    $str_addons .= $addon.val(). ', ';  
}}
$str_addons = substr($str_addons, 0, -2); //to del the last comma
}

if(isset($_POST['cblist_addons']) && !empty($_POST['cblist_addons']) ) {
$str_addons = implode(',',$_POST['cblist_addons']);
}

您可以使用implode

加入以逗号分隔的数组中的所有值

现在,您正在使用此标准

$criteria->condition = 'id in (:cblist_addons)';

但您可以使用条件添加条件

$criteria->addInCondition($column, $values);

Where $column is the name of the column and $values is the array of the values 

简而言之,您的整体代码将如下所示

    $criteria = new CDbCriteria();              
    $criteria->select = 'price'; 
    if(isset($_POST['cblist_addons']) && !empty($_POST['cblist_addons']) ){
    $criteria->addInCondition('id', $_POST['cblist_addons']);
    } else{
    $criteria->addInCondition('id', array(1,2,3,4));
    }
$model_addons = Addon::model()-> findAll ($criteria);

第二件事: -

在php中,您不能使用 .(点)访问对象的属性。 您必须使用 ->