如何使用Symfony 3在游戏中包含AJAX

时间:2017-02-11 11:10:00

标签: ajax twig symfony

我正在研究一个带有symfony 3的项目,我希望通过他们正在处理的项目名称从数据库中动态获取用户列表。

这是控制器动作: enter image description here

这种方式它没有显示任何内容,它只显示第一个用户,如果我以这种方式编写动作: enter image description here

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你有一个页面,你有一个AJAX请求,它将返回一些已经用树枝渲染的数据。

您需要做的是:

  1. 一个返回普通HTML页面的控制器

  2. 第二个控制器返回与第一个控制器相同的渲染数据,但是这个控制器使用的模板只包含将由AJAX请求返回的HTML。

  3. 在您的AJAX请求中,调用第二个控制器中定义的路由并显示结果。

  4. 例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));
        }
    }