это мой первый пост на stackoverflow!
У меня есть эта проблема в моем методе контроллера. Я хотел бы спросить пользователя, хочет ли он добавить что-то, что он искал и не существует в базе данных. Но когда я спрашиваю его согласия, форма, которую я сделал, не отправляется. Я не уверен, ясно я или нет, но вот мои 2 формы и функция контроллера.
Первая форма, которую я использую:
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class MachineOSType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name',TextType::class, [
'label' => 'Nom de l\'OS'
])
->add('version',TextType::class, [
'label' => 'Version de l\'OS',
'required' => false
])
->add('Valider',SubmitType::class, [
'attr' => ['class' => 'btn btn-block form-rounded btn-success']
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => null
]);
}
}
Вторая форма, запрашивающая согласие, просто да / нет (да / нет)
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class ValidationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('reponse',ChoiceType::class,[
'label' => ' Choix ',
'choices'=> [
'Oui' => 1,
'Non' => 0,
],
'expanded' => true,
'multiple' => false,
'label_attr' => ['class' => 'radio-inline text-center '],
'attr' => ['class' => 'text-center']
])
->add('Valider',SubmitType::class, [
'attr' => ['class' => 'btn btn-block btn-success form-rounded']
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => null
]);
}
}
Контролер:
/**
* @Route("/{id}/OS/add", name="os_machine_add_form", methods={"GET","POST"})
*/
public function os_machine_add_form(Machine $machine, Request $request, Request $request2, OperatingSystemRepository $osr)
{
$em = $this->getDoctrine()->getManager();
$form = $this->createForm(MachineOSType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$nomOS = $form["name"]->getData();
$verOS = $form["version"]->getData();
$fullOS = [
'nomOS' => $nomOS,
'verOS' => $verOS
];
if ($verOS != null) {
$OS = $osr->findBy([
'name' => $nomOS,
'version' => $verOS,
]);
$size = count($OS);
if ($size == 0) {
$form2 = $this->createForm(ValidationType::class);
$form2->handleRequest($request2);
if ($form2->isSubmitted() && $form2->isValid()) {
if ($form2["reponse"]->getData() == 1) {
$newOS = new OperatingSystem();
$newOS->setName($nomOS);
$newOS->setVersion($verOS);
$em->persist($newOS);
$em->flush();
}
}
return $this->render('machine/os_add.html.twig', [
'fullos' => $fullOS,
'os' => $OS,
'machine' => $machine,
'form' => $form->createView(),
'form2' => $form2->createView(),
]);
}
}
}
return $this->render('machine/os_add.html.twig', [
'machine' => $machine,
'form' => $form->createView(),
]);
}
Вот что я получаю, когда отправляю что-то, чего нет в базе данных: Вывод изображения , но когда я нажимаю «Valider», он не создает нового объект.
Если у вас есть какие-либо предложения или какой-либо другой способ сделать это, я беру его, я вроде как новичок в Symfony так:)
Спасибо, что прочитали .
РЕДАКТИРОВАТЬ:
Я отбросил идею использования формы проверки. Я создал другую функцию, которую я вызывал в теге
Функция:
/**
* @Route("/{id}/user/validate/OS/{nomOS}/{verOS}", name="user_validate")
*/
public function userValidate(Machine $machine,$nomOS, $verOS) {
$em = $this->getDoctrine()->getManager();
$newOS = new OperatingSystem;
$newOS->setName($nomOS);
$newOS->setVersion($verOS);
$em->persist($newOS);
$em->flush();
return $this->redirectToRoute('machine_show', ['id' => $machine->getId()]);
}
И в ветке:
<div class="col-md-6">
<a href="{{path('user_validate'{id:machine.id,nomOS:fullos.nomOS,verOS:fullos.verOS})}}" class="btn btn-success btn-block"> Oui </a>
</div>
Я не совсем уверен, если он чистый или безопасный, но пока подойдет.