2017-02-11 2 views
1

私はsymfony 3を使ってプロジェクトを進めています。作業しているプロジェクトの名前でデータベースからユーザのリストを動的に取得したいと思います。Symfony 3でtwigにAJAXを含める方法

このコントローラのアクションである:それは何も表示されません enter image description here

この方法で私はアクションをこのように書いた場合、それが唯一の最初のユーザーを示しています enter image description here

+0

私が最初の場所ブレークポイントを作成し、デバッガで全体を実行したいですあなたはあなたの結果を得て、何が$膿になるのかを調べます。デバッガを実行できない場合は、foreachの直前にvar_dump($ pus)を挿入してください。それはあなたに問題の手がかりを与えます。 ProjectUser構造を知らなくても、findByNameが実際にネイティブリポジトリ関数かあなたが書いたものであるかどうかを知らなくても、言うことは難しいです。とにかく、彼の答えで言及したLeBlobbは、コントローラ内でHTMLを生成するのではなく、Symfonyで期待されていることとは一線を画しています。 – userfuser

+0

問題は私がそれらを修正したリポジトリクエリにありましたが、今はforeachループは何も返しません。ループの外側で後で使用すると、foreachで構築された配列は未定義となります。 –

+0

そうすべきではありません。配列を適切に構築していると思いますか、それともforeachに入っていますか?エラー報告が有効になっていますか?たぶんあなたは報告されていないことが起こっているかもしれません。開発モードまたはプロダクションモードですか? – userfuser

答えて

1

私はそれを理解しない場合そうです、あなたはAJAXリクエストを持っているページを持っています。このリクエストは、すでにtwigでレンダリングされたデータを返します。

何をする必要がある:通常のHTMLページ

  • あなたの最初のコントローラが行うのと同じあなたのレンダリングされたデータを返す二コントローラを返しますが、

    1. つのコントローラはこの1つは使用していますテンプレートには、AJAXリクエストによって返されるHTMLのみが含まれています。

    2. AJAXリクエストでは、2番目のコントローラで定義されたルートを呼び出し、結果を表示します。

    例1:

    ControllerOne.php:

    class ControllerOne extends Controller 
    { 
        /** 
        * @Route("/") 
        * @return \Symfony\Component\HttpFoundation\Response 
        */ 
        public function indexAction() 
        { 
         // show your page 
         return $this->render('index.html.twig'); 
        } 
    } 
    

    ControllerTwo.php:

    class ControllerTwo extends Controller 
    { 
        /** 
        * @Route("get/data/{userId}") 
        * @param $userId 
        * @return \Symfony\Component\HttpFoundation\Response 
        */ 
        public function getDataAction($userId) 
        { 
         // get some data 
         $em = $this->getDoctrine()->getManager(); 
    
         // this example shows retrieving user data 
         // implement your logic for retrieving projecty by user id here 
         $userData = $em->getRepository('AppBundle:User')->findOneBy(array('id' => $userId)); 
    
         return $this->render('user.data.html.twig', array('user' => $userData)); 
        } 
    } 
    

    index.html.twig:

    <!DOCTYPE html> 
    <html lang="en"> 
    <head> 
        <meta charset="UTF-8"> 
        <title>Title</title> 
    </head> 
    <body> 
        <script type="application/javascript"> 
    
         // call the controller to get the rendered data 
         $.ajax({ 
          url: "/get/data/1" 
         }) 
           .done(function(data) { 
            // insert data into div 
            $("#myDiv").html(data); 
           }); 
        </script> 
    </body> 
    </html> 
    

    user.data.html.twig:

    <div> 
        <p> 
         <!-- you have access to the data passed from controller here --> 
         User name: {{user.name}} 
        </p> 
    </div> 
    

    例2:

    JsonResponseController.php:

    class JsonResponseController extends Controller 
    { 
        /** 
        * @Route("get/data/{userId}") 
        * @param $userId 
        * @return \Symfony\Component\HttpFoundation\Response 
        */ 
        public function getDataAction($userId) 
        { 
         // get some data 
         $em = $this->getDoctrine()->getManager(); 
    
         // this example shows retrieving user data 
         // implement your logic for retrieving projecty by user id here 
         $userData = $em->getRepository('AppBundle:User')->findOneBy(array('id' => $userId)); 
    
         return new JsonResponse(array('userData' => $userData)); 
        } 
    } 
    
  • +0

    私はレンダリングするための別のビューを持っていません

    +0

    あなたがデータを取り出すアクションでSymfony \ Component \ HttpFoundation \ JsonResponseを返すだけでいいです:http ://symfony.com/doc/current/components/http_foundation.html#creating-a-json-responseそれが助けてくれれば、私の答えに慣れて受け入れることができます – LeBlobb

    +0

    もう一つの例を追加しました – LeBlobb

    関連する問題