2017-05-07 2 views
1

Ich habe 2 Aktionen in der gleichen Controller. Ich finde ein Problem beim Übergeben von geposteten Werten von der ersten Aktion an die zweite. Ich habe versucht, Forward-Methode http://symfony.com/doc/current/controller/forwarding.htmlGebuchte Werte von einer Aktion zu einer anderen in der gleichen Controller in Symfony übergeben

BTW beide Aktionen (die "Weiterleitung" und die "weitergeleitet an") haben Formulare mit Übermittlungen.

Problem ist, ich konnte nicht auf die Variable "$ param1" in der zweiten Aktion zugreifen. Es geht immer null.

Gibt es etwas, was ich hier verpasst habe?

Hier ist mein Code:

Dies ist die erste Aktion:

/** 
    * 
    * @Route("/new1", name="command_check1") 
    */ 
    public function check1Action(Request $request) 
    { 
     $host = new Host(); 
     $form = $this->createFormBuilder($host) 
      ->add("iPaddress", TextType::class) 
      ->getForm(); 

     $form->handleRequest($request); 

     if ($form->isSubmitted() && $form->isValid()) 
     { 
      $a= $form["iPaddress"]->getData(); //$a= '127.0.0.1' 

      **$this->forward('AcmeBundle:Command:check2', array('param1' => $a));** 

      if($this->pingAction($a)==true){ 
      return $this->redirectToRoute('command_check2'); } 

     } 

      return $this->render('host/new1.html.twig', array(
      'host' => $host, 
      'form' => $form->createView(),)); 
    } 

Dies ist die zweite Aktion:

/** 
    * 
    * @Route("/new2", name="command_check2") 
    */ 
    public function check2Action(Request $request, **$param1**) 
    { 

    **var_dump($param1); // here i can get the posted value $param1= '127.0.0.1'** 

     $host = new Host(); 
     $form = $this->createFormBuilder($host) 
      ->add("login", TextType::class) 
      ->add("password", TextType::class) 
      ->getForm(); 
     $form->handleRequest($request); 

    **var_dump($param1); // until here it works good $param1= '127.0.0.1'** 


     if ($form->isSubmitted() && $form->isValid()) 
     { 

    **// the problem is here after submitting the 2nd form 
      var_dump($param1); // $param= null** 


      $b= $form["login"]->getData(); 
      $c= $form["password"]->getData(); 

     } 

     return $this->render('host/new2.html.twig', array(
      'host' => $host, 
      'form' => $form->createView(),)); 
    } 
+0

Warum möchten Sie das tun? Forwarding ist in Symfony keine gute Übung. – COil

+0

Ich habe keine andere Lösung gefunden, also habe ich die Forward-Methode ausprobiert. Hast du eine Idee, wie kann ich es anders machen? – User

Antwort

2

Zum einen ist nach vorne nur notwendig Trog verschiedene Controller, in den gleichen Controller, anstatt einen Vorlauf zu machen, einfach die andere Aktion aufrufen:

$this->check2Action($request, $a); 

Auf der anderen Seite basierend auf Ihrem Ansatz ist keine Notwendigkeit, eine Weiterleitung oder Aufruf der check2Action.

Dies ist meine Empfehlung basierend auf dem Beispiel (nicht getesteten Code)

/** 
* 
* @Route("/new1", name="command_check1") 
*/ 
public function check1Action(Request $request) 
{ 
    $host = new Host(); 
    $form = $this->createFormBuilder($host) 
     ->add("iPaddress", TextType::class) 
     ->getForm(); 

    $form->handleRequest($request); 

    if ($form->isSubmitted() && $form->isValid()) 
    { 
     $a = $form["iPaddress"]->getData(); //$a= '127.0.0.1' 

     if($this->pingAction($a)==true){ 
     return $this->redirectToRoute('command_check2', ['ip' => $a]); 
     } 
     } 

     return $this->render('host/new1.html.twig', array(
     'host' => $host, 
     'form' => $form->createView(),)); 
} 

Action2:

/** 
    * 
    * @Route("/new2/{ip}", name="command_check2") 
    */ 
    public function check2Action(Request $request, $ip) 
    { 

     $host = new Host(); 
     $form = $this->createFormBuilder($host) 
      ->add("login", TextType::class) 
      ->add("password", TextType::class) 
      ->getForm(); 
     $form->handleRequest($request); 

     if ($form->isSubmitted() && $form->isValid()) 
     { 

      var_dump($ip); 

      $b= $form["login"]->getData(); 
      $c= $form["password"]->getData(); 

     } 

     return $this->render('host/new2.html.twig', array(
      'host' => $host, 
      'form' => $form->createView(),)); 
    } 

Im obigen Beispiel der IP im action1 vorgelegt wird als Argument an check2 geben redirect, dann wird die Abgabe von action2 mit dieser IP übernommen und ist immer verfügbar.

+0

Vielen Dank @rafrsr !! Es funktioniert :)) aber wie die Parameter von der RedirectToRoute an den Zweigpfad übergeben? Ich versuchte dieses Re-check und ich erhielt diesen Fehler "variable" IP "existiert nicht in tiwg" – User

+0

Ihr Beispiel ist korrekt, aber wird benötigt, den IP-Parameter zum Zweig zu führen, zum Beispiel wenn Sie die IP in ** host/new2 anzeigen müssen .html.twig ** füge '' ip '=> $ ip' in den Render-Parametern hinzu. – rafrsr

+0

Kannst du mir bitte helfen wenn du eine Idee hast und danke im Voraus :)) @rafrsr http://stackoverflow.com/questions/43891514/draw-charts-with-a-loop-using-highcharts-in -Symphonie – User

Verwandte Themen