yii:strcmp()期望参数2为string,给定数组

时间:2012-11-19 09:22:28

标签: php yii

问题:strcmp()期望参数2为字符串,给定数组

用户更新时出现此错误消息。用户创建工作正常。我该如何解决这个问题?

我创建了一个radiobuttonlist,如下所示

<div style="height:140px; padding-left: 20px;">
        <div>

            <?php echo $form->labelEx($model,'role'); ?>
            <?php 
                echo $form->radioButtonList($model, 'role', $roles,
                           array('labelOptions'=>array('style'=>'display:inline; padding-right: 1em; vertical-align:middle '), // add this code
                     ));

            ?> 
            <?php echo $form->error($model,'role'); ?>
        </div>
    </div>

$ roles来自控制器

if(Yii::app()->user->isSuperuser)
        {
            $all_roles=new RAuthItemDataProvider('roles', array('type'=>2, ));
            $roles = $all_roles->fetchData();
        }else
            $roles = Authitem::model()->findAll('type=2 And name<>:name',array(':name'=>'Superadmin'));

        $original_roles = Authassignment::model()->findAll('userid=:userid',array(':userid'=>$model->id));
        $model->role    = CHtml::listData($original_roles, 'itemname', 'itemname'); 

        $roles = CHtml::listData($roles,'name','name');
        //$model->role = array_merge($original_roles, $roles);
        //$model->role = (array)$original_roles;
        //var_dump($model->role);
        //die;
        $this->render('update',array(
            'model'=>$model,
            'profile'=>$profile,
            'roles'=>$roles,
            //'department'=>$department,
            //'designation'=>$designation,
            'original_roles'=>$original_roles,
        ));

当我使用$ form-&gt; checkBoxList时,它正常工作。

3 个答案:

答案 0 :(得分:0)

调用RadioButtonList()时设置的第四个参数应该是键值对的数组,而不是数组数组。我不确定您是否可以定义'labelOptions',因为它不是HTML标记。

发生错误是因为Yii期望您的最终数组是键值对,而是看到'labelOptions'是一个数组,而不是一个字符串。

尝试类似的事情;

echo $form->radioButtonList($model, 'role', $roles,
    array('style'=>'display:inline; padding-right: 1em; vertical-align:middle '),
);

甚至更好地使用css;

.myRadioButtonList { display:inline; padding-right: 1em; vertical-align:middle }

并在视图中:

echo $form->radioButtonList($model, 'role', $roles,
    array('class'=>'myRadioButtonList'),
);

答案 1 :(得分:0)

当您使用$form->radioButtonList()生成按钮列表时,yii会生成一个额外的隐藏输入字段。如果您以标准方式提交表单,那该工作正常。

但是,当您为ajax提交序列化表单时,.serialize()会选择隐藏的<input>。然后,它具有所述单选按钮字段的两个值,并继续创建数组而不是单个值。

这会导致错误: strcmp()期望参数2为字符串,给定数组

最好的解决方案是阻止yii生成隐藏的<input>。这可以通过添加

轻松实现
array('uncheckValue'=>NULL)

作为HTMLoption。例如:

$form->radioButtonList($model,'viewer_format', $options, array('uncheckValue'=>NULL));

答案 2 :(得分:-1)

您的渲染需要 2 个参数,首先是视图,然后是参数 示例:返回 $this->render('view', []);