1

製品を 1 つ以上の部門に関連付けることができる製品対部門テーブルと 1 対多の関係を持つ製品テーブルがあります。

部門を検証するために新しい製品を追加するときに問題が発生します。

部門を選択しない場合でも、フォームは検証されて送信されます。

ここでフォームを作成します。

class NewProductType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('departments', 'collection', array(
            'type' => new ProductDepartmentType(),
            'required' => true,
        ));
...

コレクションは ProductDepartmentType クラスを介して設定されます。

class ProductDepartmentType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('department', 'entity', array(
            'property' => 'indentedName',
            'class' => 'WebIllumination\SiteBundle\Entity\Department',
            'query_builder' => function(EntityRepository $er) {
                return $er->createQueryBuilder('d')
                    ->addSelect('dd')
                    ->leftJoin('d.descriptions', 'dd')
                    ->orderBy('d.displayOrder', 'ASC');
            },
            'required' => true,
            'empty_value' => '- Select a Department -',
        ), array());
        $builder->add('displayOrder', 'hidden');
    }

    public function getDefaultOptions(array $options)
    {
        $collectionConstraint = new Collection(array(
            'department' => array(
                new NotBlank(array('message' => 'Select a department.')),
            ),
        ));

        return array(
            'validation_constraint' => $collectionConstraint,
        );
    }

    public function getName()
    {
        return 'site_product_department';
    }
}

次に、ProductDepartmentType に以下を追加してみました。

class ProductDepartmentType extends AbstractType
{
...
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'WebIllumination\SiteBundle\Entity\ProductToDepartment'
        ));
    }
...

これは影響がなく、フォームは検証されずに送信できます。

このフィールドを検証する方法を教えてくれる人はいますか?

4

1 に答える 1

1

ネストされたフォームがある場合、デフォルトではエラーは親フォームに渡されません。error_bubbling => true子フォームでは、検証するフィールドを設定する必要があります。これにより、エラーが親フォームに渡されます。http://symfony.com/doc/current/reference/forms/types/entity.html#error-bubbling

于 2013-02-12T16:23:40.183 に答える