Во-первых, вы должны разбить свой код.Ваш файл контроллера должен контролировать что происходит - не делать и строить все.
Создайте свою форму в каталоге Src/Form
.Создайте новую папку с именем Profile и создайте файл с именем AddType.php - полный путь должен быть Src/Form/Profile/AddType.php
.
# Src/Form/Profile/AddType.php
<?php
namespace App\Form\Profile;
use App\Entity\Profile;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
class AddType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('userName', TextType::class)
->add('userDepartment', ChoiceType::class, array(
'placeholder' => 'Select department',
'choices' => array(
'HR' => 'hr',
'Marketing' => 'marketing',
'Development' => 'development',
'Finance' => 'finance',
'Logistics' => 'logistics',
),
))
->add('userPosition', TextType::class)
->add('userPhone', TextType::class)
->add('userEmail', TextType::class)
->add('save', SubmitType::class, array('label' => 'Create Profile'));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => Profile::class
));
}
}
Тогда в вашем контроллере:
<?php
class CreateController extends Controller
{
public function index(Request $request)
{
$profile = new Profile();
$form = $this->createForm(AddType::class, $profile);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($profile);
$em->flush();
# what other actions you need. e.g redirect to success page
}
return $this->render('product/add.html.twig', ['form' => $form->createView()]);
}
}
Затем выполните рендерингформа в вашей ветке:
# templates/product/add.html.twig
{{ form_start(form) }}
{# your custom code for rendering the form #}
{# if you leave default then it should render with bad styles etc. #}
{{ form_end(form) }}
Примечание: Возможно, вам придется изменить вышеуказанный код в соответствии с вашими потребностями кодирования, но должно (теоретически) работать - это работает со страницы, созданной сфайл ветки - у вас не должно быть формы в контроллере, если вы не планируете использовать форму.Просто передайте данные вручную ...