2017-12-15 5 views
1

I、次の質問を有する:レスポンス/リクエストでアレイを送信する方法は?

私はこの二つの機能を持つコントローラの使用:

両方の機能は私が前方べき関数indexActionで

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'] 
      )); 

} 

ルーティング独自のルート@seeを有します私は新しいURLが必要なので、次の関数(resultAction)に移動します。同様に、配列$ dataであり、resultActionの関数indexActionでが生成されていますが、パラメータとして配列を持つルートを呼び出す方法はわかりません。

ルーティングファイルはそうなります

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

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

機能が同じコントローラーにあるので、私は(私はそれは素敵なparadigmaではありません知っている)は、グローバル変数を使用しようとしましたが、それは作品なかったです。同様に、私は$ data配列をレスポンスに入れようとしましたが、それもうまくいきませんでした。

どのようにパラメータとして配列を持つルートを呼び出すことができますか? このアレイを一時的に保管しておいてください。転送後に使用できますか?

ご協力ありがとうございます。

+0

シリアル化された配列を送信してから、必要なコントローラで逆シリアル化を試しましたか? – Generwp

+0

こんにちは、私は(セッション変数として)それを試してみましたが、あなたはそれをどのように送信するのですか?、セッション変数のResponse?または経路のパラメータとして? – helmi

答えて

0

あなたはきっとここに私の簡単なテストで、ルートにパラメータとして送信することができます:

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); 
} 

しかし、覚えて、文字列の長さのためにいくつかの制限がありますGETと私はセッション変数を使用すると、より適切であろうと思い、 serializeされたデータをindexActionに設定してからresultActionで取得してください

+0

遅れて申し訳ありません。私はもう一度試してみました。御時間ありがとうございます! – helmi

関連する問題