yii:strcmp()要求参数2是字符串,给定数组

jgzswidk  于 2022-11-09  发布在  其他
关注(0)|答案(3)|浏览(147)

问题: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->checkBoxList使用时,它工作正常。

3pvhb19x

3pvhb19x1#

调用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'),
);
mfpqipee

mfpqipee2#

当你用$form->radioButtonList()生成一个按钮列表时,yii会生成一个额外的隐藏输入字段。如果你以标准方式提交表单,这会很好。
然而,当您序列化一个表单以提交 AJAX 时,.serialize()会提取隐藏的<input>,然后它会为所说的单选按钮字段创建两个值,并继续创建一个数组而不是一个值。
这会导致以下错误:strcmp()要求参数2为字符串,给定数组
最好的解决方案是防止yii生成隐藏的<input>

array('uncheckValue'=>NULL)

作为HTML选项。例如:

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

pgx2nnw83#

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

相关问题