Это в основном вопрос о том, как объединить две сущности в одну форму. Есть и другие вопросы, которые касаются этого, но некоторые устарели и устарели. Этот вопрос также является примером того, как не воспользоваться тем, что может предложить Symfony, и работать немного сложнее, чем разработчик.
В частности, Symfony имеет дело с csrf из коробки и не требует специальной настройки. Вы можете делать больше с ним, но проще начать с работающей реализации по умолчанию, а затем настроить при необходимости. Аналогичным образом, веточка имеет рендеринг формы по умолчанию. После того, как форма заработает, вы можете использовать различные инструменты для стилизации, чтобы она выглядела красиво.
Начните с упрощения ваших классов EntityType и добавления RegisterType:
class UserType extends AbstractType
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => User::class,
));
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username', TextType::class)
->add('email', EmailType::class)
->add('password', PasswordType::class);
}
}
class CompanyType extends AbstractType
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => Company::class,
));
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class)
->add('bulstat', TextType::class);
}
}
class RegisterType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('user', UserType::class)
->add('company', CompanyType::class)
->add('register', SubmitType::class);
}
}
Теперь настройте код контроллера и используйте рендеринг формы по умолчанию:
public function register(Request $request)
{
$user = new User();
$company = new Company();
$register = ['user' => $user, 'company' => $company];
$form = $this->createForm(RegisterType::class, $register);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
dump($user);
dump($company);
}
return $this->render('register.html.twig',['form' => $form->createView()]);
}
# register.html.twig
{% extends 'base.html.twig' %}
{% block body %}
<h1>Register</h1>
{{ form(form) }}
{% endblock %}
На данный момент у вас должна быть рабочая форма. Затем вы можете добавить проверку и постоянство, а также придать форме красивый вид.