【问题标题】:yii : strcmp() expects parameter 2 to be string, array givenyii : strcmp() 期望参数 2 是字符串,给定数组
【发布时间】:2021-02-23 22:21:46
【问题描述】:

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

【问题讨论】:

  • 哪里冒犯了strcmp
  • 当我使用 $form->radioButtonList 时,strcmp() 期望参数 2 是字符串,数组给定 checkBoxList 时,表单工作正常。我想使用 $form->radioButtonList.
  • 显示您使用strcmp的代码
  • Sergey

标签: php yii


【解决方案1】:

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

【讨论】:

  • 不,无法解决。同样的错误。我试过 K.O.这个错误没有像这样的任何css echo $form->radioButtonList($model, 'role', $roles); 但我不能:(
  • 很奇怪,stcmp() 错误是哪一行?在CHtml.php radioButtonList() method?
  • 这么想,好吧,由于某种原因,this method 正在返回一个字符串,这是不应该的。然后将该值传递给readioButtonList() 方法...非常奇怪,您可以编辑CHtml.php 文件以每隔一段时间沿路线转储var,以便您可以跟踪radioButtonList() 方法中的$select 成为一个数组?
  • 另外,将这个 cmets 讨论转移到聊天可能是一个想法,可能更容易理解? :)
  • 我还没有在聊天中讨论。让我试试。请告诉我什么时候可以开始。
【解决方案2】:

当您使用$form-&gt;radioButtonList() 生成按钮列表时,yii 会生成一个额外的隐藏输入字段。如果您以标准方式提交表单,则效果很好。

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

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

最好的办法是防止yii生成隐藏的&lt;input&gt;。这可以很容易地通过添加来实现

array('uncheckValue'=>NULL)

作为 HTML 选项。例如:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 2020-01-27
      • 2023-03-15
      相关资源
      最近更新 更多