Флажок Symfony установлен по умолчанию, но не установлен, если не отмечен после сохранения - PullRequest
0 голосов
/ 04 октября 2018

Оповещение о спойлере: этот вопрос задавался много раз на протяжении многих лет, но, разумеется, я не видел рабочих решений. здесь например

Я разрабатываю приложение на основе версии Symfony 2.8.

У меня есть объект с логическим значением, который я сопоставляю в formType с CheckboxType.

Что мне нужно, это:

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

Это говорит, что ямы перепробовали много «решений», которые были предложены по темам

1) В Entity

я установил для моего логического атрибута значение true => FAIL:флажок не установлен по умолчанию

class MyEntity
{
  /**
   * @ORM\Column(name="enabled", type="boolean")
   */
  private $enabled = true;

  public function __construct()
  {
    $this->enabled = true;
  }
}

2) В FormType

  public function buildForm(FormBuilderInterface $builder, array $options)
  {
    $builder
      ->add('enabled', CheckboxType::class, [
        'required' => false,
        'empty_data' => true,
      ]);
  }

Это 'empty_data' => true (или 'empty_data' => 1или что-то еще) работает "частично": он отображает правильное состояние флажка ПОСЛЕ персистентности, но не проверяет tфлажок по умолчанию => FAIL

  public function buildForm(FormBuilderInterface $builder, array $options)
  {
    $builder
      ->add('enabled', CheckboxType::class, [
        'required' => false,
        'data' => true,
      ])
  }

По умолчанию флажок установлен, НО, если пользователь снимает флажок и сохраняется, в перезагруженной форме по-прежнему отображается флажок, даже если постоянное состояние не проверено=> FAIL это ожидается, как указано в документах

Поскольку этот объект не является основным объектом формы: подчиненная форма (в коллекции), я также попыталсяустановить для составного атрибута значение true в CheckboxType без эффекта.

3) Установка значения в контроллере при создании экземпляра формы

этот вариант невозможен, так как флажок не указан в основном Entity / FormType

=> Мой метод

Sofar, единственное "рабочее решение", которое я нашелустановить флажок при добавлении нового блока этой коллекции с использованием javascript:

$(element).prop('checked', true)

Это менее чем оптимально ...

У вас есть решение для этого с SF> =2.8 (2.8 моя версия)?Решение - сторона Symfony.

1 Ответ

0 голосов
/ 04 октября 2018
 $builder->add('enabled', CheckboxType::class, array(
        'attr' => array('checked' => 'checked'),
    ));

не забудьте установить значение true перед сохранением:

$obj->setCheckboxValue(true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...