Всем привет. Недавно работаю с Symfony 4 по этой причине и есть много непонятного. Столкнулся с такой ситуацией что при создании новой записи(работаю не через Entity а через DTO) некоторые параметры установились в значение null.
dump($request->get('hotel_form_builder')):
"countryId" => "189"
"cityId" => "425754"
dump($form->getData()):
+countryId: null
+cityId: null
Если быть конкретнее то это 2 параметра(`countryId` и `cityId`). Для этих двух полей был "написан" свой тип Select2Type:
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\FormView;
use Symfony\Component\Form\FormInterface;
class Select2Type extends AbstractType {
public function buildView(FormView $view, FormInterface $form, array $options)
{
$attr = $view->vars['attr'];
$class = isset($attr['class']) ? $attr['class'].' ' : '';
$class .= 'select2';
$attr['class'] = $class;
$attr['data-autocomplete-url'] = $attr['data-autocomplete-url'];
$view->vars['attr'] = $attr;
}
public function getParent() {
return ChoiceType::class;
}
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults([
'attr' => [
'class' => 'form-control select2',
'data-autocomplete-url' => ''
]
]);
}
}
Данные передаю через url в виде {id: id, text: 'text'}. Есть большая вероятность того что я неправильно что-то описал или написал.
Это часть кода из buildForm:
...
->add('countryId', Select2Type::class, [
'label' => 'hotel.field.countryId',
'translation_domain' => 'hotel_inventory',
'required' => true,
'attr' => [
'data-autocomplete-url' => $router->generate('hotel_country'),
'class' => 'form-control select2SearchCountry',
]
])
->add('cityId', Select2Type::class, [
'label' => 'hotel.field.cityId',
'translation_domain' => 'hotel_inventory',
'required' => true,
'attr' => [
'data-autocomplete-url' => $router->generate('hotel_city'),
'class' => 'form-control select2SearchCity',
]
])
...
Буду признателен за помочь. Если есть какие то идеи или вопросы то задавайте. Вдруг вместе мы поймем где проблема.