【问题标题】:Symfony 2 PUGXAutoCompleterBundleSymfony 2 PUGXAutoCompleterBundle
【发布时间】:2015-04-01 08:33:25
【问题描述】:

我正在尝试使用:https://github.com/PUGX/PUGXAutoCompleterBundle/blob/master/Resources/doc/index.md

但是ajax请求search_books,返回错误:

The controller must return a response (Array(results => Array(0=>Object,1=>Object,...) given

我猜这个问题来自return compact('results');,但我找不到解决方法。

感谢阅读。 M

【问题讨论】:

  • 好像你必须在你的控制器方法中定义一个树枝模板,你能展示你的代码吗?你在使用自述文件中列出的树枝吗?

标签: php symfony autocomplete


【解决方案1】:

在文档中没有指定模板是如何呈现的(缺少注释?)。

我想您必须为正确的树枝添加正确的模板注释并正确管理 JSON 响应。

我使用这个包并在我的控制器中将数据呈现为:

/**
 * @Route("/autocomplete-user/search", name="acme_autocomplete_user_search")
 */
public function autocompleteUserSearchAction(Request $request)
{
    $q = $request->get('term');
    $userRepository = $this->get('acme.user_provider');
    $users = $userRepository->findLikeUsername($q);

    $results = array();
    foreach ($users as $user) {
        $results[] = array(
            'id' => $user->getId(),
            'name' => $user->getFullName(),
            'label' => sprintf("[%s] %s", $user->getUsername(), $user->getFullName())
        );
    }

    return new JsonResponse($results);
}

另一种方法是:

/**
 * @Route("/autocomplete-user/{id}", name="acme_autocomplete_user_get")
 */
public function autocompleteUserGetAction($id)
{
    $userRepository = $this->get('acme.user_provider');
    $user = $userRepository->find($id);

    return new Response($user->getUsername());
}

希望有帮助

【讨论】:

  • 嗨@MatMouth!不客气!考虑在捆绑包的文档上打开一个拉取请求,以澄清以便更好地使用
【解决方案2】:

这个包的文档记录真的很糟糕。

如果您使用的是 Jquery-UI 库,Matteo 在上一篇文章中所说的是正确的。你想使用 Select2 库吗,你必须这样修改代码:

/**
 * @Route("/autocomplete-user/search", name="acme_autocomplete_user_search")
 */
public function autocompleteUserSearchAction(Request $request)
{
    $q = $request->get('q');
    $userRepository = $this->get('acme.user_provider');
    $users = $userRepository->findLikeUsername($q);

    $results = array();
    foreach ($users as $user) {
        $results[] = array(
            'id' => $user->getId(),
            'text' => $user->getFullName())
        );
    }

    return new JsonResponse($results);
}

请注意,属性 i 不再是“term”而是“q”

请注意,对于 Select2 lib,默认的 Json 响应格式如下:

{
 more: false,
 results: [
    { id: "CA", text: "California" },
    { id: "AL", text: "Alabama" }
    ]
}

但在 PUGXAutoCompleterBundle 中它只期望:

[ { id: "CA", text: "California" },
      { id: "AL", text: "Alabama" } ]

此外,文档中没有提及支持的版本。它适用于我: jquery 1.11.3 和 jquery-ui 1.11.3 要么 jquery1.11.3 和 select2 3.5.2

希望可以节省您的时间

【讨论】:

    猜你喜欢
    • 2012-01-17
    • 2015-03-14
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多