Подтвердить что ты не робот

Как включить флажок в symfony?

Я определил следующую переменную внутри объекта в моем приложении. У меня есть это, среди других полей, которые можно обновить через интерфейс формы, и я хочу иметь возможность проверить и снять этот флажок в этой форме.

Я могу установить флажок и отправить форму в порядке, но кажется, что, когда я снимаю флажок, я не могу отправить форму. Это дает мне Please check this box if you want to proceed.

/**
 * @var boolean $updatesNeeded
 *
 * @ORM\Column(name="updates_needed", type="boolean", nullable=false)
 */
private $updatesNeeded;

Я попытался изменить nullable=false на nullable=true и обновить схему, но, похоже, не работает. Любые идеи будут высоко оценены.

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class BlahType extends AbstractType
{
    /**
     * @param \Symfony\Component\Form\FormBuilder $builder
     * @param array                               $options
     */
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('stuff')
            ->add('updatesNeeded', 'choice', array('required' => false))
            ->add('anothervar');
    }
}
4b9b3361

Ответ 1

Хорошо, похоже, что я использовал неправильную версию своего сайта. Все упомянутые методы работают, и я просто хочу кратко изложить их ниже для тех, кто сталкивается с такой проблемой в будущем.

Проблема в том, что HTML5 любит проверять формы самостоятельно и добавляет required="required" к любому входу формы. Обычно это, вероятно, полезно, но для некоторых вещей, таких как флажки, вы хотите оставить их непроверенными и отправить форму без запроса браузера на стороне клиента.

Существует несколько способов решения этой проблемы, некоторые лучше других.

Во-первых, просто отключить всю проверку для формы с помощью HTML5, как упоминается официальным symfony docs.

Другим является добавление информации к переменной сущности в комментариях, делая nullable=true. Это позволяет соответствующему столбцу в вашей базе данных иметь нулевые значения, что может или не может быть желательным для вашей ситуации. Это показано ниже.

/**
 * @var boolean $varName
 *
 * @ORM\Column(name="var_name", type="boolean", nullable=true)
 */
private $varName;

Наконец, при создании формы существуют определенные опции, которые можно использовать для проверки в формах. docs и дайте больше примеров, но для наших целей здесь важна то, что вы можете установить 'required' => false, как я показал ниже.

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class BlahType extends AbstractType
{
    /**
     * @param \Symfony\Component\Form\FormBuilder $builder
     * @param array                               $options
     */
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('stuff')
            ->add('checkbox_var', 'checkbox', array('required' => false))
            ->add('anothervar');
    }
}

Спасибо всем людям, которые помогли мне в этом вопросе. Надеюсь, что это поможет кому-то, кто будет иметь дело с такими проблемами в будущем.

Ответ 2

Эта ошибка связана с тем, что вход отмечен атрибутом HTML5 required="required". В вашем типе формы вы можете отключить это, установив для этого параметра required значение false.

$builder->add('updatesNeeded', 'choice', array('required' => false));

http://symfony.com/doc/current/book/forms.html#book-forms-html5-validation-disable

Ответ 3

Как насчет использования nullable=""