Решение как часто бывает простое. Не создавать внутренние поля для своего типа
namespace App\Form\Type;
use ...
class UserSelectType extends AbstractType
{
private $userRepository;
public function __construct(UserRepository $repository)
{
$this->userRepository = $repository;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
// Это фрагмент удаляем и вставляется обычное поле, а не форма
$builder->add(
'user',
AutocompleteType::class,
[
'label' => false,
'class' => User::class,
'attr' => [
'placeholder' => 'Клиент',
'class' => 'user-autocomplete-property',
],
]
);
//dd($builder);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(
[
'label' => false,
'class' => User::class,
'attr' => [
'placeholder' => 'Клиент',
'class' => 'user-autocomplete-property',
],
]
);
}
public function getParent()
{
return AutocompleteType::class;
}
}
namespace App\Form;
use ...
class VehicleFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
/**
* @var Vehicle $vehicle
*/
$vehicle = $options['data'] ?? null;
$isEdit = $vehicle && $vehicle->getId();
$builder
->add(
'user',
UserSelectType::class,
[
'empty_data' => new ClientData(),
'property_path' => 'clientData',
]
)
->add(
'brand',
TextType::class,
[
'attr' => [
'placeholder' => 'Бренд',
],
'label' => false,
]
)
->add(
'button',
SubmitType::class,
[
'attr' => [
'class' => 'btn btn-primary',
],
'label' => $isEdit ? 'Изменить' : 'Сохранить',
]
)
->add(
'resetButton',
ResetType::class,
[
'attr' => [
'class' => 'btn btn-secondary',
],
'label' => 'Сбросить',
]
);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(
[
'data_class' => Vehicle::class,
]
);
}
}
Во первых добавил empty_data, теперь все резолвится и отношения подхватываются
Во вторых нашел почему новая с форма вставляется а не поле в текущую форму. Надо удалить фрагмент в билдере.