yii上变量$ _POST的问题

时间:2013-08-22 09:59:10

标签: ajax forms yii http-post cgridview

我制作一个cgridview,其中一列可编辑更新数据based on this post

只有一个按钮(更新许可证)来更新ajax调用中的所有字段。

但它只更新了第一个字段。

我认为$_POST变量发生了一些事情。

我尝试了几种方法来查看$_POST变量的循环失败。

我的代码:

查看:

<?php $form=$this->beginWidget('CActiveForm', array(
    'enableAjaxValidation'=>true,
)); ?>


<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'rta-client-grid',
    'selectableRows'=>1,
    'selectionChanged'=>'mostrarDetalles',  // via 1: para mostrar detalles al seleccionar
    'dataProvider'=>$modelClient->search(),
    'filter'=>$modelClient,
    'columns'=>array(
        array(
            'id'=>'autoId',
            'class'=>'CCheckBoxColumn',
            'selectableRows' => '50',
        ),
        'oid',
        'name',
        'surname',
        'id_country',
        'nif',
        //'CifDni',
        array(
            'name'=>'CifDni',
            'type'=>'raw',
            'value'=>'CHtml::textField("CifDni[$data->oid]",$data->CifDni,array("style"=>"width:80px;"))',
            //
        ),
        array(
            'class'=>'CButtonColumn',
        ),
        array(
            'class'=>'CButtonColumn',
            'template' => '{detallarClientes}',
            'buttons' => array(
                'detallarClientes'=>array(
                    'label'=>'ver',
                    'imageUrl'=>'images/demo1/view.png',
                    'click'=>'js:mostrarDetalles',
                ),
            ),
        ),

    ),
)); ?>

<script>
    function reloadGrid(data) {
        $.fn.yiiGridView.update('rta-client-grid');
    }
</script>
<?php echo CHtml::ajaxSubmitButton('Filter',array('rtaClient/ajaxupdate'), array(),array("style"=>"display:none;")); ?>
<?php echo CHtml::ajaxSubmitButton('Update licencias',array('rtaClient/ajaxupdate','act'=>'doUpdateLicencia'), array('success'=>'reloadGrid'),array("style"=>"float:right;")); ?>
<?php $this->endWidget(); ?>

控制器:

public function actionAjaxupdate()
{
    $act = $_GET['act'];
    if($act=='doUpdateLicencia')
    {
        $sortOrderAll = $_POST['CifDni'];
        if(count($sortOrderAll)>0)
        {
            foreach($sortOrderAll as $menuId=>$sortOrder)
            {
                $model=$this->loadModel($menuId);
                $model->CifDni = $sortOrder;
                $model->save();
            }
        }
    }
}

在FirebugConsole上发布变量:

CifDni[10]  H
CifDni[11]  I
CifDni[12]  J
CifDni[2]   A
CifDni[3]   B
CifDni[4]   C
CifDni[6]   D
CifDni[7]   E
CifDni[8]   F
CifDni[9]   G
RtaClient[CifDni]   
RtaClient[id_country]   
RtaClient[name] 
RtaClient[nif]  
RtaClient[oid]  
RtaClient[surname]  

我刚刚解决了这个问题。我修改了控制器添加:

    foreach($_POST as $id=>$value)
    {
        if($id=="CifDni") {
            foreach($value as $id2=>$value2)
            {
                $model=$this->loadModel($id2);
                $model->CifDni = $value2;
                $model->save();
            }
        }
    }

但是基地的问题是在其他领域(在网格上没有显示)有规则'必需'而在数据库中没有价值,他们不让我更新SQL错误(sql错误'' t出现在日志中。

public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        //array('pass', 'required'), //<----

1 个答案:

答案 0 :(得分:0)

$model->save(false);

强制保存模型而不通过规则验证,而不是删除模型上的规则。