silex/symfonyで、項目Aが入力されていたら、項目Bに必須入力チェックをかける、みたいなFormの書き方。
もう少しスマートなやり方があるような気もする。
public function index(Application $app, Request $request)
{
$validator = $app['validator'];
$builder = $app->form(null, [
'csrf_protection' => false // 動作確認のためcsrf_protectionをはずす
]);
$builder
->add('input-a', TextType::class)
->add('input-b', TextType::class)
// POST_SUBMITでチェックを実行
->addEventListener(FormEvents::POST_SUBMIT, function(FormEvent $event) use ($validator) {
$form = $event->getForm();
$data = $event->getData();
// input-aが入力されてたら
if (!is_null($data['input-a'])) {
// input-bをNotBlankでチェック
$errors = $validator->validate($data['input-b'], [
new NotBlank()
]);
foreach ($errors as $error) {
// input-bのフォームにエラーを追加
$form['input-b']->addError(new FormError($error->getMessage()));
}
}
});
$form = $builder->getForm();
$form->submit([
'input-a' => '123', // input-aのみ入力
]);
dump($form->isValid()); // false
dump((string)$form->getErrors(true, true)); // 入力されていません