PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Wednesday, May 11, 2022

[FIXED] How Can I specified the object of my precedent form?

 May 11, 2022     forms, php, symfony     No comments   

Issue

In my project I want to use the object created by my precedent form:

Here is the schema of my database:

my database

My QuizController

public function creation(Request $request){
        $quiz = new Quiz();
        $user = $this->getUser();

        $formQuiz = $this->createForm(QuizType::class, $quiz);

        $formQuiz->handleRequest($request);
  

        if ($formQuiz->isSubmitted() && $formQuiz->isValid() ) {
            $quiz->setCreatedAt(new DateTimeImmutable());
            $quiz->setCreatedBy($user);
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($quiz);
            $entityManager->flush();

            return $this->redirectToRoute('creation_questions');
        }
        return $this->render('quiz/creation.html.twig', [
            'formQuiz' => $formQuiz->createView(),
        ]);
    }

And my QuestionController that must be connected with the quiz form

public function creation_questions(Request $request){
        $quiz = ?
        $question = new Questions();

        $formQuestions = $this->createForm(QuestionType::class, $question);
        
        $formQuestions->handleRequest($request);

        if ($formQuestions->isSubmitted() && $formQuestions->isValid() ) {
            $question->setCreatedAt(new DateTimeImmutable());
            $question->setQuiz($quiz);
 
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($question);
  
            $entityManager->flush();

            return $this->redirectToRoute('home');
        }
        return $this->render('questions/questions.html.twig', [
            'formQuestion' => $formQuestions->createView()
        ]);
    }

What do I have to write in place of the '?'?


Solution

You don't show your routing but you could use paramConverte "magic" from SensioFrameworkExtraBundle and do something like this.

/**
 * @Route("/some-route/{id}", name="some_route_name")
 */
public function creation_questions(Request $request, Quiz $quiz)
{
    $question = new Questions();

    $formQuestions = $this->createForm(QuestionType::class, $question);

    $formQuestions->handleRequest($request);

    if ($formQuestions->isSubmitted() && $formQuestions->isValid()) {
        $question->setCreatedAt(new DateTimeImmutable());
        $question->setQuiz($quiz);

        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->persist($question);

        $entityManager->flush();

        return $this->redirectToRoute('home');
    }
    return $this->render('questions/questions.html.twig', [
        'formQuestion' => $formQuestions->createView()
    ]);
}

Where the {id} part of /someRoute/{id} is the Quiz Id. Symfony should automagically fetch the Quiz matching that id. Or you can be more explicit about how the param converter should interpret such a value. More info here https://symfony.com/bundles/SensioFrameworkExtraBundle/current/annotations/converters.html

Alternatively, you could pass the quiz id and fetch the quiz manually (less magic but totally legit).

/**
 * @Route("/some-route/{id}", name="some_route_name")
 */
public function creation_questions(Request $request, int $id)
{
    $entityManager = $this->getDoctrine()->getManager();
    $quiz = $entityManager->getRepository(Quiz::class)->find($id);
    $question = new Questions();

    $formQuestions = $this->createForm(QuestionType::class, $question);

    $formQuestions->handleRequest($request);

    if ($formQuestions->isSubmitted() && $formQuestions->isValid()) {
        $question->setCreatedAt(new DateTimeImmutable());
        $question->setQuiz($quiz);

        $entityManager->persist($question);

        $entityManager->flush();

        return $this->redirectToRoute('home');
    }
    return $this->render('questions/questions.html.twig', [
        'formQuestion' => $formQuestions->createView()
    ]);
}


Answered By - Julien B.
Answer Checked By - Timothy Miller (PHPFixing Admin)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing