0

問題: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,
    ));
}

as を使用すると$form->checkBoxList、正しく動作します。

4

3 に答える 3

0

RadioButtonList()を呼び出すときに設定する4番目のパラメーターは、配列の配列ではなく、キーと値のペアの配列である必要があります。'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'),
);
于 2012-11-19T13:11:22.000 に答える
0

でボタン リストを生成すると$form->radioButtonList()、yii は追加の非表示の入力フィールドを生成します。標準的な方法でフォームを送信する場合、これは問題なく機能します。

ただし、ajax 送信用にフォームをシリアル化すると.serialize()、非表示の<input>. 次に、上記のラジオボタン フィールドに 2 つの値があり、単一の値ではなく配列の作成に進みます。

これにより、エラーが発生します: strcmp() は、パラメーター 2 が文字列であり、配列が指定されていることを期待しています

最善の解決策は、yii が hidden を生成しないようにすることです<input>。これは、追加することで簡単に実現できます

array('uncheckValue'=>NULL)

HTMLオプションとして。例えば:

$form->radioButtonList($model,'viewer_format', $options, array('uncheckValue'=>NULL));
于 2014-04-12T12:36:14.340 に答える