2016-06-14 13 views
1

Ich habe 2 Aktionen Funktionen in meinem Controller und ich möchte Variable auf eine andere Aktion FunktionÜbergeben Sie die Variable in Symfony vom Controller zum anderen?

Dies ist meine erste Funktion in meinem Controller in meinem Controller

public function newUserAction(Request $request) 
{ ......... 
$url = $this->generateUrl('userBundle_new_user_reasonCodeAjaxView', 
array('id' => $newUser->getCode(), 
      'countCode' => $countCode,)); 
      return $this->redirect($url); 

meine zweite funtion passieren Diese

 public function userCodeAjaxViewAction(Request $request, $id) 
{ 

    $em = $this->getDoctrine()->getManager(); 
    $pc = $em->getRepository('UserBundle:Code')->find($id); 

    if($pc != null) 
    { 
     return $this->render('UserBundle:userCodeView.html.twig', array(
     'pc' => $pc, 

     )); 
    } 

Und sieht meine twif wie diese

<div class=""> 
    <div class="panel panel-default step3-textarea top-arrow top-arrow"> 
     <div class="panel-body"> 
      <fieldset> 
       <div> 
        {{ pc.name|trans }} 

    {{countCode}} 

       </div> 
      </fieldset> 

     </div> 
    </div> 
</div> 

Ich erhalte einen Fehler Variable "countCode" does not exist in...

Gibt es eine Idee, wie ich eine Variable von einem Controller in einem anderen Controller verwenden kann?

Antwort

0

Sie können eine Variable nicht von einem anderen Controller abrufen.
Jede Anfrage erstellt nur eine Controller-Instanz.

Sie können einen Dienst erstellen, den Sie im Controller aufrufen können.
So etwas:

class CountUserService{ 
    public function count(){ 
     return 1; // count users here 
    } 
} 

Und die in der Steuerung wie folgt vorgehen:

$service = new CountUserService(); 
$data=['countCode' => $service->count()]; 
return $this->render('UserBundle:userCodeView.html.twig', $data); 
0

Sie verwenden den gleichen Vorlagenbereich für die beiden Controller. Dies ist nicht möglich. Wenn Sie zwei Controller verwenden, um zwei einfache Informationen zu rendern, geben Sie einfach einen JSON zurück und zeigen ihn in einer globaleren Vorlage mit AJAX an.

Else eine reine symfony Lösung wäre, eine Hauptvorlage view.html.twig haben, wo Sie

<div class=""> 
<div class="panel panel-default step3-textarea top-arrow top-arrow"> 
    <div class="panel-body"> 
     <fieldset> 
      <div> 
       {{ render(controller("AppBundle:UserController:newUserAction")) }} 

       {{ render(controller("AppBundle:UserController:userCodeAjaxViewAction")) }} 

      </div> 
     </fieldset> 

    </div> 
</div> 

Da setzen würde, dass dann zwei Controller Aktionsvorlagen würden {{ pc.name|trans }} und {{countCode}} einfach sein.

Hoffe es hilft dir aus!

+0

Sie könnten machen auch http://twig.sensiolabs.org/doc/functions/index.html zu lösen Dies ! –

Verwandte Themen