Если я понимаю правильно, у вас есть страница, на которой у вас есть запрос AJAX, который должен вернуть некоторые данные, уже полученные с помощью ветки.
Что вам нужно сделать, это:
Один контроллер, который возвращает нормальный HTML страницу
Второй контроллер, который возвращает ваши оказанные данные так же, как ваш первый контроллер делает, но это один использует шаблон, который содержит только HTML, который будет возвращен запросом AJAX.
В запросе AJAX вызовите маршрут, определенный во втором контроллере, и отобразите результат.
Пример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>
Example2:
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));
}
}
я первый запустить все это с помощью отладчика, сделать точку останова где вы получаете свои результаты и проверяете, что вы получаете в $ pus. Если вы не можете запустить отладчик, просто вставьте несколько var_dump ($ pus) прямо перед foreach. Это даст вам ключ к проблеме. Трудно сказать, не зная вашу структуру ProjectUser, или если findByName на самом деле является встроенной функцией репозитория или что-то, что вы написали. Во всяком случае, то, что ЛеБлобб упомянул в своем ответе, будет гораздо больше в соответствии с тем, что ожидается в Symfony, вместо того, чтобы генерировать HTML внутри контроллера. – userfuser
Проблема была в запросах хранилища, которые я исправил, но теперь цикл foreach ничего не возвращает. любой массив, построенный в foreach, отмечен как undefined, если я использую его позже вне цикла. –
Этого не должно быть. Вы уверены, что правильно строите массив или даже попадаете в этот foreach? У вас включена учетная запись об ошибках? Возможно, что-то происходит, о чем вы не видите. Вы работаете в режиме разработки или производства? – userfuser