0

populate()このチェックボックスについてデータが渡されないのに、値= 0のこのチェックボックスがチェックされる理由がわかりません...

私のフォーム要素:

$this->addElement('multiCheckbox', 'etoiles', array(
    'filters'    => array('Int'),
    'separator' => '',
    'label_placement' => 'prepend',
    'label_class' => 'caseacocher',
    'decorators'  => $decorator_chain,
));

$listeEtoiles = array(
    '0' =>'Sans étoiles',
    '1' => '1 étoile"',
    '2' => '2 étoiles',
    '3' => '3 étoiles',
    '4' => '4 étoiles',
    '5' => '5 étoiles',
) ;
$this->getElement('etoiles')->addMultiOptions($listeEtoiles) ;

フォームをコントローラーに入力する方法:

$this->view->searchForm->populate($this->getRequest()->getPost()) ;

ダンプ時に得られるもの$this->getRequest()->getPost('etoiles'):NULL

チェックボックスで得られるもの:

<input id="etoiles-0" type="checkbox" checked="checked" value="0" name="etoiles[]">

理解できません。についてのデータがないのに、このチェックボックスをオンにするにはどうすればよいですetoiles[]か?? 「Int」フィルターがそれと関係があることがわかりました。削除する必要がありますか? そして、この Int フィルターを保持したい場合はどうすればよいでしょうか?

バリデーターはありません。いくつか追加する必要がありますか?InArray バリデータはどうですか? $_POST データは文字列として渡されると考えていたため、values 配列は文字列インデックスを使用しています。間違いですか?

コメントやヘルプをいただければ幸いです:)

4

1 に答える 1

0

'0'これは、stringと int 0(ラジオ フォーム要素ではチェックされていない)と の混同である可能性がありnull、PHP の癖の 1 つです。

特に、入力値を int にフィルタリングしているのに対し、values 配列は文字列インデックスを使用しているため (デフォルトのバリデーターを使用しない理由はありますInArrayか?)

さらに、FormRadioヘルパーin_array($opt_value, $value)が厳密なパラメーターなしで使用して、checked プロパティを決定していることがわかります。

于 2012-10-08T13:51:38.813 に答える