2017-12-15 2 views
1

Ich habe folgende Frage:So senden Sie ein Array nach Antwort/Anforderung?

ich einen Regler mit diesen beiden Funktionen verwenden:

Beide Funktionen eine eigene Route @see

public function indexAction(Request $request) 
{ 


    $searchForm = $this->getSearchForm(); 
    $searchForm->handleRequest($request); 
    **$data** = $searchForm->getData(); 


    if($searchForm->isValid()){ 
     if(!$data['birthdate'] && !$data['birthyear'] && !$data['patientID'] && !$data['patientNO']){ 
      $searchForm->addError(new FormError("Please specify at least one search parameter.")); 
     } 
     else 
     {  

      return $this->forward('GeneralCommonBundle:DataHome:result', array(
      'limit' => '20', 
      'offset' => '0' 
      )); 

      //return $this->redirect($this->generateUrl('result', array('limit' => '20', 'offset' => '0'))); 
     } 
    } 

    . . . . . 


} 

public function resultAction(Request $request, $limit, $offset){ 


$repo = $this->getDoctrine()->getManager()->getRepository('DataLiveBundle:DataAPatient'); 
$qb = $repo->getFindingPatientQuery($data['birthdate'], 
$data['patientID'],$data['birthyear'] ,$data['patientNO'], $data['center'], $data['registry'] ,$data['study']); 


        $total = $repo->countQueryResults($qb); 

        $qb = $repo->addLimitToQuery($qb, $limit, $offset); 


        $paginationOptions = array(
         'total' => $total, 
         'limit' => $limit, 
         'offset' => $offset 
        ); 

        //$query = $qb->getQuery(); 

        $entities = $repo->getResults($qb);   

      return $this->render('GeneralCommonBundle:DataHome:show.html.twig', array(
      'records'=> $entities, 
      'isNew' => false, 
      'paginationOptions' => $paginationOptions, 
      'newrecord' => false, 
      'birthdate'=> $data['birthdate'], 
      'patientID'=> $data['patientID'], 
      'birthyear'=> $data['birthyear'], 
      'patientNO'=> $data['patientNO'], 
      'center' => $data['center'], 
      'registry' => $data['registry'], 
      'study' => $data['study'] 
      )); 

} 

i weiterleiten soll in der Funktion index Routing hat zur nächsten Funktion (resultAction), weil ich eine neue URL brauche. Auch brauche ich die Array $ Daten die in der Funktion indexAction generiert wird, in der Funktion resultAction, aber ich weiß nicht, wie ich eine Route mit einem Array als Parameter aufrufen kann.

Die Routing-Datei sieht so:

dataHome: 
pattern: /home 
defaults: { _controller: "GeneralCommonBundle:DataHome:index"} 

result: 
pattern: /{limit}/{offset}/result 
defaults: { _controller: "GeneralCommonBundle:DataHome:result", limit: 20, offset: 0 } 

ich eine globale Variable zu verwenden versucht, (ich weiß, es ist kein schönes Paradigma), da die Funktionen in dem gleichen Controller sind, aber es hat nicht funktioniert. Ich versuchte auch, das $ Datenarray in die Antwort zu setzen .. aber es funktionierte auch nicht ..

Wie kann ich eine Route mit einem Array als Parameter aufrufen? Oder speichern Sie dieses Array vorübergehend, dass ich es nach der Weiterleitung verwenden kann?

Danke für Ihre Unterstützung !!

+0

Haben Sie versucht, ein serialisiertes Array zu senden und dann im benötigten Controller zu deserialisieren? – Generwp

+0

Hallo ich habe es versucht (als Sitzungsvariable), aber wie Sie es senden würden ?, in einer Sitzungsvariablen, in der Antwort? oder als Parameter in der Route? – helmi

Antwort

0

Sie können sicherlich als Parameter in der Route, hier ist mein Schnelltest senden:

public function testAction() 
{ 
    $testArray = [ 
     'data1' => 'data', 
     'data2' => 'data' 
    ]; 



    return $this->forward('App\Controller\TestController::otherAction', [ 
     'data' => serialize($testArray) 
    ]); 
} 

public function otherAction($data) 
{ 
    $data = unserialize($data); 

    return new JsonResponse($data); 
} 

Aber denken Sie daran, dass GET einige Einschränkungen für String-Länge hat, und ich denke, dass Session-Variable verwendet wird mehr angemessen, Setzen Sie einfach serialisierte Daten in indexAction und rufen Sie sie dann in resultAction ab.

+0

Entschuldigung für die verspätete Antwort.! Ich habe es erneut versucht und es hat funktioniert! Vielen Dank für Ihre Zeit! – helmi