Yii的。依赖下拉

时间:2014-09-23 10:15:51

标签: php yii

我尝试做依赖选择。

我的模特

区域 ID 区域

城市 ID 市 的region_id

客户 ID 区域 市 地址 电话

在我的观点(客户表格)中:

<div class="row">
    <?php
    echo $form->dropDownList($model,'region',CHtml::listData(Region::model()->findAll(), 'id', 'region'),
        array(
            'prompt'=>'Select Region',
            'ajax' => array(
                'type' => 'POST', //My method type
                'url' => CController::createUrl('myController/LoadRegions'), //This is my request/ajax URL
                array('id'=>'js:this.value'), //I'm passing the selected dropdonw value.
                'dataType' => 'JSON',
                'success'=>'js:function(data)' //The functionaliy after success
                    . '{'
                    . '    var html="";'
                    . '    $.each(data,function(i,obj)'
                    . '    {'
                    . '         html+="<option value=obj.City_id>"+obj.City_city+"</option>"'
                    . '    });'
                    . '    $("#User_City_id").html(html);' //ID of regions dropdown list
                    . '}'

            )));
    echo CHtml::dropDownList($model,'City_id', array(), array('prompt'=>'Select City'));

    ?>

在我的控制器(客户)中:

public function actionLoadRegions()
    {

        $Region_id=$_POST['region'];

        $criteria=new CDbCriteria();
        $criteria->select=array('Region_id, Region_region');
        $criteria->condition='Region_id='.$Region_id;
        $criteria->order='Region_region';
        $RegionAry= Region::model()->findAll($criteria);

        $ary=array();
        foreach($RegionAry as $i=>$obj)
        {
            $ary[$i]['Region_id']=$obj->Region_id;
            $ary[$i]['Region_region']=$obj->Region_region;
        }
        echo json_encode($ary);
    }

但代码不起作用。类Customer的错误对象无法转换为字符串。为什么呢?

3 个答案:

答案 0 :(得分:0)

这将有效

您的表格

'success'   => 'js:function(data) {
                     $("#User_City_id").html(data);
               }'

您的控制器功能

public function actionLoadRegions()
    {

        $Region_id=$_POST['region'];

        $criteria=new CDbCriteria();
        $criteria->select=array('Region_id, Region_region');
        $criteria->condition='Region_id='.$Region_id;
        $criteria->order='Region_region';
        $RegionAry= Region::model()->findAll($criteria);

        $ary=array();
        foreach($RegionAry as $i=>$obj)
        {
            $ary[$i]['Region_id']=$obj->Region_id;
            $ary[$i]['Region_region']=$obj->Region_region;
        }
       echo CHtml::dropDownList('dropdown_name', $selected, $ary);

    }

答案 1 :(得分:0)

我对Yii并不熟悉,但我认为你将整数变量视为字符串,以便显示错误。

你确定 -

echo CHtml :: dropDownList($ model,'City_id',array(),array('prompt'=&gt;'Select City'));

尝试改为

echo CHtml :: dropDownList($ model,City_id,array(),array('prompt'=&gt;'Select City'));

答案 2 :(得分:0)

使用类似的东西:

echo $form->dropDownList(
                $model,
                'state_id', 
                $array,
                array(
                    'class' => 'form-control',
                    'ajax' => array(
                            'type' => 'POST',
                            'url' => $this->createUrl('getregions'),
                            'update' => '#Customers_region_id',
                            'data'=>array('state_id'=>'js:this.value')
                        )
                )
        ); ?>

但您必须在定义dropDownList时更改字段state_id,update和url的名称。

也许会有所帮助。