Как я могу хранить данные из окна выбора типа сущности (Symfony)?

У меня есть поле выбора, созданное с помощью formbuilder:

<select id = "form_type" name = "form[type]" class = "form-control select2 select2-hidden-accessible" tabindex = "-1" aria-hidden = "true">
  <option value = "1">text</option>
  <option value = "2">hidden</option>
  <option value = "3">password</option>
  <option value = "4" selected = "selected">icon</option>
  <option value = "5">select</option>
</select>

Вот как он создается в моем контроллере:

$formBuilder->add('type', EntityType::class, array(
            'attr' => array('class' => 'form-control select2'), 'label' => 'Type',
            'class' => FieldTypes::class,
            'choice_label' => function ($fieldTypes) {
              return $fieldTypes->getName();
              }
            ));

$formBuilder->add('cancel', ButtonType::class, array('label' => 'cancel','attr' => array('class' => 'cancel form-btn btn btn-default pull-right close_sidebar')))
        ->add('save', SubmitType::class, array('label' => 'Save','attr' => array('id' => 'submit-my-beautiful-form','class' => 'form-btn btn btn-info pull-right','style' => 'margin-right:5px')));
        $form = $formBuilder->getForm();

        $form->handleRequest($request);

Но когда я хочу сохранить выделение, я получаю сообщение об ошибке:

Argument 1 passed to App\Entity\Fields::setType() must be an instance of App\Entity\FieldTypes or null, string given, called in /Users/work/project/src/Controller/PagesController.php on line 242

В моей сущности:

 public function setType(?FieldTypes $type): self
  {
    $this->type = $type;
    return $this;
  }

Вот как он хранился:

$entity = $this->getDoctrine()->getRepository($EntityName)->find($data['form[id]']);
$em = $this->getDoctrine()->getManager();
foreach ($fields as $field) {
   $em = $this->getDoctrine()->getManager();
   $func = 'set'.$field['fieldName'];
   $args = $data['form['.$field['fieldName'].']'];
   $entity->$func($args);
}
$em->flush();
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
405
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Воспользуйтесь методом $form->handleRequest($request). Он заполнит вашу форму, используя свою конфигурацию (он создаст экземпляр FieldType, используя опубликованный идентификатор).

Здесь вы вручную добавляете «сырое» значение вашего выбора, которое представляет собой строку, содержащую идентификатор вашего FieldType.

изменить: см. документы

У меня уже есть `$ form-> handleRequest ($ request);` просто не разместил его здесь, должно быть, другая проблема (я обновлю свой вопрос

peace_love 13.12.2018 12:24

Я предполагал, что вы использовали класс формы и создали его с помощью метода $this->createForm(Form::class, $type), извините. В этом случае переменная $ type автоматически заполняется опубликованным значением формы в соответствии с конфигурацией формы. Это наиболее правильный способ использования формы, вы должны взглянуть на это;)

Etshy 13.12.2018 14:51

Согласно вашему коду, его немного сложно понять, но если $ field представляет собой строку.

foreach ($fields as $field) {
$obj = $this->getDoctrine()->getRepository($fieldEntity)->find(field);      
$entiy->setType($obj);
}

Спасибо! Я не был уверен, что такое field, это имя связанного столбца? Вот как связаны сущности: /** * @ORM\ManyToOne(targetEntity = "FieldTypes") * @ORM\JoinColumn(name = "type", referencedColumnName = "id") */ private $type;

peace_love 13.12.2018 13:37

Он проверил ваш код следующим образом: $fieldEntity = new FieldTypes(); $obj = $this->getDoctrine()->getRepository($fieldEntity)->find(id); $entiy->setType($obj);

peace_love 13.12.2018 13:37

Ошибка теперь: Warning: Illegal offset type in isset or empty

peace_love 13.12.2018 13:38

Попробуйте после блока отправки формы

$entity->setType($form->get('type'));

$ form-> get ('type') вернется как класс FieldTypes.

также, если вы используете $ field вместо $ field ['fieldName'], будет возражать вернуть. Например,

$func = 'set'.$field;
$func = 'set'.$field; выдает ошибку Notice: Array to string conversion
peace_love 13.12.2018 18:11

Другие вопросы по теме