не может установить сущность поля формы (от многих ко многим) по мере необходимости

У меня есть счет-фактура Entity с отношением ManyToMany к Entity PaymentMethod

class Invoice
{
    /**
     * @ORM\ManyToMany(targetEntity="Evo\BackendBundle\Entity\PaymentMethod")
     * @ORM\JoinTable(name="sf_invoices_paymentmethods")
     */
    protected $paymentMethods;
}

В моем типе формы счета я добавляю это поле со следующим скриптом:

->add('paymentMethods', 'entity', array(
        'label' => false,
        'class' => 'EvoBackendBundle:PaymentMethod',
        'query_builder' => function(EntityRepository $er) {
            return $er->createQueryBuilder('pm')
                ->where('pm.usedInInvoice = 1')
                ->orderBy('pm.position');
        },
        'property' => 'name',
        'expanded' => true,
        'multiple' => true,
        'required' => true,
    ))

И когда я смотрю на исходный код, сгенерированный страницей формы, я вижу, что в моих флажках paymentMethods нет атрибута required="required". Кто-нибудь знает, почему?

Как я могу убедиться, что хотя бы 1 метод оплаты проверен (на стороне клиента) и чтобы у каждого счета был хотя бы 1 метод оплаты (на стороне доктрины)

Я попробовал @ORM\JoinTable(name="sf_invoices_paymentmethods", nullable=false), но выдает ошибку.


person VaN    schedule 21.08.2014    source источник


Ответы (2)


Нашел решение.

добавлен

'constraints' => array(
    new Count(array(
        'min' => 1,
        'minMessage' => 'At least 1 choice is required',
    )),
),

Итак, мое поле в типе формы выглядит так:

->add('paymentMethods', 'entity', array(
        'label' => false,
        'class' => 'EvoBackendBundle:PaymentMethod',
        'query_builder' => function(EntityRepository $er) {
            return $er->createQueryBuilder('pm')
                ->where('pm.usedInInvoice = 1')
                ->orderBy('pm.position');
        },
        'property' => 'name',
        'expanded' => true,
        'multiple' => true,
        'constraints' => array(
            new Count(array(
                'min' => 1,
                'minMessage' => 'At least 1 choice is required',
            )),
        ),
    ))
person VaN    schedule 22.08.2014

Флажки позволяют пользователю выбрать НОЛЬ или БОЛЬШЕ опций из ограниченного числа вариантов. Это не о symfony. Это вопрос HTML, я думаю, вы должны написать код javaScript.

Для серверной части используйте проверку, в вашем случае проверка выбора

person Omar J Fry    schedule 21.08.2014
comment
хорошо для html, я проверю это jquery. А как насчет доктрины? В отношении ManyToMany, как я могу принудительно выбрать хотя бы 1 объект? - person VaN; 22.08.2014
comment
используйте параметр min - person Omar J Fry; 22.08.2014
comment
Где я должен использовать эту опцию? В типе формы? В объявлении свойства сущности? Мой тип поля установлен на сущность, похоже, он не принимает опцию min. - person VaN; 22.08.2014
comment
Нет, вы должны понимать использование проверки. - person Omar J Fry; 22.08.2014