いくつかのチェックボックスとテキストフィールドを含む silex フレームワークを使用してフォームを作成しました。ユーザーは、少なくとも 1 つのチェックボックスをオンにするか、テキストフィールドに何かを書き込む必要があります。今、そのような依存関係を検証する方法や、検証ロジックをどこに置くべきかがわかりません。単一のフィールドに制約を追加することはできますが、チェックボックスまたはテキストフィールドが検証されるという依存関係を実装するにはどうすればよいですか?
これは、コントローラー クラスの検証コードです。
public function validateAction(Request $request, Application $app)
{
$form = $app['form.factory']->create(new ApplicationForm());
$form->bind($request);
if ($form->isValid()) {
return $app->json(array(
'success' => true,
));
}
}
ApplicationForm クラスは次のようになります (簡略化)。
class ApplicationForm extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('crafts', 'choice', array(
'choices' => array(
array('drywall' => 'Drywall'),
array('painter' => 'Painter'),
array('plasterer' => 'Plasterer'),
array('carpenter' => 'Carpenter'),
array('electrician' => 'Electrician'),
array('plumber' => 'Plumber'),
array('tiler' => 'Tiler'),
array('bricklayer' => 'Bricklayer'),
),
'multiple' => true,
'expanded' => true,
'required' => false,
))
->add('craftsOther', 'text', array(
'attr' => array('class' => 'textinput', 'placeholder' => 'Other', 'maxlength' => 256),
'constraints' => array(
new Assert\Length(array('max' => 256, 'maxMessage' => $this->_errorMessages['crafts_other_max'])),
),
'required' => false,
));
}
}
これをエレガントな方法で行う方法はありますか?