Как я могу хранить данные из сущности selectbox (Symfony)? - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть поле выбора, созданное с помощью 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);

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

Аргумент 1, передаваемый в App \ Entity \ Fields :: setType (), должен быть экземпляром App \ Entity \ FieldTypes или заданной нулевой строки, вызываемой в / Users / work /project / src / Controller / PagesController.php в строке 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();

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

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

foreach ($fields as $field) {
$obj = $this->getDoctrine()->getRepository($fieldEntity)->find(field);      
$entiy->setType($obj);
}
0 голосов
/ 13 декабря 2018

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

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

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

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

$func = 'set'.$field;
0 голосов
/ 13 декабря 2018

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

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

редактирования: см. документы

...