从 Symfony 控制器发送数组到 javascript
Posted
技术标签:
【中文标题】从 Symfony 控制器发送数组到 javascript【英文标题】:Send array to javascript from Symfony controller 【发布时间】:2021-12-17 18:42:23 【问题描述】:我需要从 Controller 发送数据数组,但我不知道什么是好方法。我认为控制器应该以 json 格式发送数组。 这是我的js代码:
$.typeahead(
input: '[data-autocomplete="team"]',
minLength: 1,
order: "asc",
offset: true,
hint: true,
source:
items:
data: [here, i need to get array data from controller]
ajax:
type: "POST",
url: "/teams",
data:
myKey: $('[data-autocomplete="team"]').val()
,
);
这是我的控制器
/**
* @Route(name="teams", path="/teams")
*/
public function sendTeams()
$em = $this->getDoctrine()->getManager();
$teams = $em->getRepository(Teams::class)->findAll();
$data = [];
foreach($teams as $team)
$data[] = $team->getName();
return new JsonResponse($data, 200, [], true);
【问题讨论】:
【参考方案1】:使用 JsonReponse 是一个合适的解决方案。
但是有多种方法可以改进您的代码。
如果你的项目配置了默认的自动装配选项,你可以自动装配你的存储库(顺便说一下,如果调用TeamRepository
关联到Team
实体而不是Teams
会更好) :
/**
* @Route(name="teams", path="/teams")
*/
public function sendTeams(TeamsRepository $teamsRepository)
$teams = $teamsRepository->findAll();
$data = [];
foreach($teams as $team)
$data[] = $team->getName();
return new JsonResponse($data, 200, [], true);
您也不应该设置JsonResponse
的bool $json
参数,因为$data
不是一个json,而是一个您希望转换为json 的数组。 使用JsonResponse 将返回带有 json 标头 的正确 JsonResponse,bool $json
参数仅有助于将 php 变量转换为 json(如果可能)。
/**
* @Route(name="teams", path="/teams")
*/
public function sendTeams(TeamsRepository $teamsRepository)
$teams = $teamsRepository->findAll();
$data = [];
foreach($teams as $team)
$data[] = $team->getName();
return new JsonResponse($data);
你也可以简化你的 foreach (箭头键功能是 php 7.4+,否则使用常规调用):
/**
* @Route(name="teams", path="/teams")
*/
public function sendTeams(TeamsRepository $teamsRepository)
$teams = $teamsRepository->findAll();
$data = array_map(fn($e) => $e->getName(), $teams);
return new JsonResponse($data);
这取决于你,但你也可以使用FOSJsRoutingBundle 来不手动写入teams
路由的路径。您可以根据需要查看如何使用它。
【讨论】:
感谢改进,我将应用它们,但是,控制器和 javascript 之间有问题,因为它无法正常工作......如果我在 javascript 中对数组进行硬编码工作正常,但通过控制器,它不起作用。 您在 javascript 中接收数据的方式应该存在问题。您可以尝试检查您的网址,看看您是否获得了正确的 json (url.com/teams)。 github.com/twitter/typeahead.js/blob/master/doc/… 文档似乎说您需要将asyncResults
与ajax 请求一起使用
你是对的,非常感谢你的帮助以上是关于从 Symfony 控制器发送数组到 javascript的主要内容,如果未能解决你的问题,请参考以下文章