0

オプションを使用して checkBoxList を正しく検証できません。

これはフォーム構成の要素です

'benefits' => array(
    'type' => 'checkboxlist',
    'items' => \application\models\db\Option::items('application.benefits'),
),

これにより、オプション テーブルからオプションが取得され、それに応じて checkBoxList が設定されます。

HTMLに問題なく入力されます。フォームを検証しようとすると問題が発生します...

Yii が返す実際の検証エラーは次のとおりです。

検証用のコードは次のとおりです。

array('benefits', 'boolean'),

問題は、データベースに既に存在するオプションに対して checkBoxList を検証するにはどうすればよいかということです。

編集:解決策が見つかりました

次の解決策は、チェックされた項目に対してオプションのチェックボックスリストをチェックするために作成された私のルールです。パラメータは次のとおりです。

'category' => 'category.table'

ルールは次のとおりです (これは、他のルールと共にフォーム モデルに入ります。

public function checkboxlistoptions($attribute, $params)
    {
        $options = \application\models\db\Option::model()->items($params['category']);

        if(is_array($options) && is_array($this->$attribute)){
            foreach($this->$attribute as $item){
                $match = false;
                foreach($options as $optionID => $option)
                    if($item == $optionID) $match = true;

                if(!$match) $this->addError($attribute, 'Could not match option to item');
            }
        } else {
            $this->addError($attribute, 'Could not find options');
        }
    }

ルールは次のように適用されます。

array('attributeName', 'checkboxlistoptions', 'category' => 'category.table'),

お役に立てれば :)

4

0 に答える 0