コレクションでカスタム クラス バリデータを使用すると問題が発生します。エラーが見つかり、適切なプロパティ パスが取得されますが、親フォームに送信されます。コレクションの各子ではなく、親フォームにエラーがリストされる原因となります...
より関連性のあるコード:
検証.yml
My\SuperBundle\Entity\Event:
properties:
conflictComment:
- NotNull: ~ # this property constraint got the right property path in the right form !
constraints:
- My\SuperBundle\Validator\DateIsAvailable: ~ # this one got the right property path, but in the parent form.
MultiEventType.php、サブフォーム エラーを取得する親フォーム
$builder
->add('events', 'collection', array(
'type' => new \My\SuperBundle\Form\Type\EventDateType()
));
...
'data_class' => 'My\SuperBundle\Form\Model\MultiEvent'
EventDateType.php、エラーを取得するコレクション
$required = false;
$builder
->add('begin', 'datetime', array(
'date_widget' => 'single_text',
'time_widget' => 'text',
'date_format' => 'dd/MM/yyyy',
'label' => 'form.date.begin')
)
->add('automatic', 'checkbox', compact('required'))
->add('conflictComment', 'textarea', compact('required'));
...
'data_class' => '\My\SuperBundle\Entity\Event'
DateIsAvailableValidator.php
namespace My\SuperBundle\Validator;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class DateIsAvailableValidator extends ConstraintValidator
{
private $container;
public function __construct($container)
{
$this->container = $container;
}
public function isValid($event, Constraint $constraint)
{
$this->setMessage($constraint->message);
return false;
}
}
プロパティ パスはchildren[events][0].dataに似ていますが、コレクション行のテンプレートにあるはずのform_errors(prototype)ではなく、form_errors(multiEventForm.events)でレンダリングされます...
エラーを正しい形式で取得する方法はありますか、それともバグですか?