我需要從控制器發送資料陣列,但我不知道什么是好方法。我認為控制器應該在 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);
}
uj5u.com熱心網友回復:
使用 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);
}
您也不應該設定bool $json引數,JsonResponse因為$data不是 json 而是要轉換為 json的陣列。使用 JsonResponse 將回傳帶有json headers的正確 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路徑。如果需要,您可以查看如何使用它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/346426.html
標籤:javascript 查询 symfony symfony4 symfony5
上一篇:僅查找嵌套陣列中的問題(遞回)
下一篇:遞回flatMap
