ZF2 アプリケーションに select 要素を含むフォームがあります。ZF1 では、バリデーターを自動的に追加して、ユーザーが無効な値を投稿しようとしていないことを確認していました。
そこで、冗談で、Firebug を使用してオプションの 1 つの値を変更し、それを送信するとどうなるかを確認することにしました。結果:見事合格。言うまでもなく、これは良くありません。
select オプションに関連するコードは次のとおりです。
$this->add(array (
'name' => 'role',
'type' => 'Select',
'attributes' => array (
'id' => 'role'
),
'options' => array (
'label' => 'Role:',
'value_options' => $roleOptions,
'column-size' => 'sm-6',
'label_attributes' => array('class' => 'col-sm-2'),
)
));
(注: $roleOptions はパラメーターとしてフォームに渡されます)
バリデータ コードの関連部分は次のとおりです。
$inputFilter->add($factory->createInput(array (
'name' => 'role',
'filters' => array(),
'validators' => array(
$notEmpty
),
)));
(明らかに、$notEmpty は NotEmpty バリデーターのインスタンスです)
何が起きてる?ZF2 は、受け取った値が元々オプションのリストの一部だったものであることを確認するバリデーターを追加しなくなりましたか? オプションを選択するには、バリデーターを手動で追加する必要がありますか?
編集:ドキュメントを確認したところ、選択要素が配列内バリデーターを自動的に追加すると書かれています。機能するはずですが、そうではありません。サーバー側で値を変更してみましたが、結果は同じでした。バリデーターは無効な値を取得していません。
はい、フォームが有効かどうかを確認しています。
編集 #2: わかりやすくするために、フォーム全体のコードを次に示します。