私はsymfony 3を使ってプロジェクトを進めています。作業しているプロジェクトの名前でデータベースからユーザのリストを動的に取得したいと思います。Symfony 3でtwigにAJAXを含める方法
このコントローラのアクションである:それは何も表示されません
この方法で私はアクションをこのように書いた場合、それが唯一の最初のユーザーを示しています
私はsymfony 3を使ってプロジェクトを進めています。作業しているプロジェクトの名前でデータベースからユーザのリストを動的に取得したいと思います。Symfony 3でtwigにAJAXを含める方法
このコントローラのアクションである:それは何も表示されません
この方法で私はアクションをこのように書いた場合、それが唯一の最初のユーザーを示しています
私はそれを理解しない場合そうです、あなたはAJAXリクエストを持っているページを持っています。このリクエストは、すでにtwigでレンダリングされたデータを返します。
何をする必要がある:通常のHTMLページ
あなたの最初のコントローラが行うのと同じあなたのレンダリングされたデータを返す二コントローラを返しますが、
つのコントローラはこの1つは使用していますテンプレートには、AJAXリクエストによって返されるHTMLのみが含まれています。
AJAXリクエストでは、2番目のコントローラで定義されたルートを呼び出し、結果を表示します。
例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));
}
}
私が最初の場所ブレークポイントを作成し、デバッガで全体を実行したいですあなたはあなたの結果を得て、何が$膿になるのかを調べます。デバッガを実行できない場合は、foreachの直前にvar_dump($ pus)を挿入してください。それはあなたに問題の手がかりを与えます。 ProjectUser構造を知らなくても、findByNameが実際にネイティブリポジトリ関数かあなたが書いたものであるかどうかを知らなくても、言うことは難しいです。とにかく、彼の答えで言及したLeBlobbは、コントローラ内でHTMLを生成するのではなく、Symfonyで期待されていることとは一線を画しています。 – userfuser
問題は私がそれらを修正したリポジトリクエリにありましたが、今はforeachループは何も返しません。ループの外側で後で使用すると、foreachで構築された配列は未定義となります。 –
そうすべきではありません。配列を適切に構築していると思いますか、それともforeachに入っていますか?エラー報告が有効になっていますか?たぶんあなたは報告されていないことが起こっているかもしれません。開発モードまたはプロダクションモードですか? – userfuser