FormServiceProvider と ValidatorServiceProvider を使用する Silex プロジェクトがあります。form.factory ビルダーでフォームを作成し、フィールドを追加し、オブジェクトをデータセットとして使用しました。
$form = $app['form.factory']->createBuilder('form', $object)
次に、送信時にフォームを「通常の方法」で検証しようとします。
if ($app['request']->getMethod() == 'POST') {
$form->bind($app['request']);
if ($form->isValid()) {
(...)
}
}
オブジェクトに、loadValidatorMetadata 静的メソッドを追加しました。
static public function loadValidatorMetadata(ClassMetadata $metadata) {
$metadata->addPropertyConstraint('name', new Assert\MinLength(5, array('message' => 'Name too short')));
}
短い名前フィールドでフォームを送信すると、isValid は依然として true を返します。次のように、オブジェクトに対して検証メソッドを実行すると:
$errors = $app['validator']->validate($object)
制約に基づいてエラーを返しますが、フォーム isValid はこのエラーを検出しません。symfony Form クラスを調べたところ、disable config が true の場合、isValid が子フィールドのチェックをスキップすることがわかりました。これは私のフォームの場合ですが、理由はわかりません。特別な設定を行わずに、Silex サービス プロバイダーを通常の方法で登録しました。オブジェクトの制約に基づいてフォームの検証を失敗させる方法はありますか?