如何附加嵌套实体引用以便附加到Symfony

时间:2016-01-05 00:59:17

标签: ajax symfony

这是previous question的后续问题,如果对背景信息有帮助的话。

我在下面收到了我试图按照建议实施AJAX。注意:一个用户(用户名)可以有多个与之关联的成员,因此我需要为所选的成员返回相关用户名:

回应路线:

use Symfony\Component\HttpFoundation\Response;

/** 
 * @Route("/member/search", name="membersearch")
 */
public function memberSearch(Request $request)
{
    $response = new Response();
    $members = $this->getDoctrine()->getRepository('AppBundle:Members')->findActiveMembers();
    $response->setContent(json_encode($members));
    $response->headers->set('Content-Type', 'application/json');
    $response->send();
}

HTML code:

我假设我的问题(或至少部分问题)是`member_id ['用户名']但是我不确定如何访问相关联的用户名构件

<!DOCTYPE html>
<html>
    <head>
        <script>
            $( "#search-names" ).autocomplete({
                source: "/member/search",
                minLength: 2,
                change: function() {
                  var familyname = $(this).val();
                  if (!familyname) return;
                  window.location = window.location + '?_switch_user=' + member_id['username'];
                }
            });
        </script>
    </head>
    <body>
        <form class="navbar-form navbar-left" role="search">
            <div class="form-group">
            <input type="text" id="search-names" class="form-control" placeholder="Search">
            </div>
            <button type="submit" class="btn btn-default">Submit</button>
        </form>
    </body>
</html>

1 个答案:

答案 0 :(得分:0)

据我了解,您正在努力使AJAX正常运行。问题是你需要两个单独的动作或一个更复杂的动作。

我建议创建两个单独的操作。一个将返回JSON响应(您可以使用JsonResponse或手动设置application/json Content-Type。不要忘记导入JsoneResponse的命名空间。另一个操作将返回一个包含模板变量的数组(不要忘记在控制器中放置@Template()注释。基本上这将是这样的(未经测试):

/**
 * @Route("/member/search", name="membersearch")
 */
public function memberSearchAction()
{
    $data = array(/*...*/);
    $response = new Response();
    $response->setContent(json_encode($data));
    $response->headers->set('Content-Type', 'application/json');

    return $response;
}

/**
 * @Route("/", name="index")
 * @Template()
 */ 
public function indexAction()
{
    return array(/* ... */);
}