Я хочу отобразить список активных пользователей. Я использую FOSUserBundle в своем проекте. Я создаю поле в своей пользовательской таблице, которое будет содержать дату и время последней активности пользователя, и я создал прослушиватель:
class ActivityListener
{
protected $tokenStorage;
protected $userManager;
public function __construct(TokenStorage $tokenStorage, UserManagerInterface $userManager)
{
$this->tokenStorage = $tokenStorage;
$this->userManager = $userManager;
}
/**
* Update the user "lastActivity" on each request
* @param FilterControllerEvent $event
*/
public function onCoreController(FilterControllerEvent $event)
{
// Check that the current request is a "MASTER_REQUEST"
// Ignore any sub-request
if ($event->getRequestType() !== HttpKernel::MASTER_REQUEST) {
return;
}
// Check token authentication availability
if ($this->tokenStorage->getToken()) {
$user = $this->tokenStorage->getToken()->getUser();
if ( ($user instanceof UserInterface) && !($user->isActiveNow()) ) {
$user->setLastActivityAt(new \DateTime());
$this->userManager->updateUser($user);
}
}
}
}
На моем контроллере:
class UserController extends Controller
{
/*
* @Template()
*/
public function whoIsOnlineAction()
{
$users = $this->getDoctrine()->getManager()->getRepository('App:User')->getActive();
return array('users' => $users);
}
}
В моем шаблоне я добавил эту строку:
{{ render(controller('App\\Controller\\UserController:whoIsOnlineAction')) }}
Но когда я пытаюсь войти в систему под простым пользователем, я получаю эту ошибку: Во время рендеринга шаблона возникло исключение ("Контроллер должен вернуть объект "Symfony\Component\HttpFoundation\Response", но он вернул массив ([users => ...]).").






Вам нужно создать ветку шаблона фрагмента, который вы хотите отобразить в своем основном шаблоне. Например, давайте назовем его _users.html.twig: и поместим в него:
<ul>
{% for user in users %}
<li>{{ user.username}}</li>
{% endfor %}
</ul>
Затем вы визуализируете его в своем контроллере метода:
class UserController extends Controller
{
/*
* @Template()
*/
public function whoIsOnlineAction()
{
$users = $this->getDoctrine()->getManager()->getRepository('App:User')->getActive();
return $this-render('_users.html.twig', array('users' => $users));
}
}
Позже, когда вы захотите отобразить его из шаблона:
{{ render(controller('App\\Controller\\UserController:whoIsOnlineAction')) }}
Он отобразит этот фрагмент.
Я не понимаю шаблон, который вы хотите отобразить. Если это сторонний пакет, вам нужно прочитать его документы, чтобы узнать, как переопределить методы его контроллера.
У меня есть мой layout.html.twig в папке templates/bundle/FOSUserBundle, и в этом макете я добавил {% extends 'base.html.twig' %} {% block content %} {{ render(controller('App\\Controller\\UserController:whoIsOnlineAction')) }} <ul> {% for user in users %} <li>{{ user.username}}</li> {% endfor %} </ul> {% endblock content %}, но теперь я ничего не вижу, и мой сервер выключается ** Максимальное время выполнения 120 секунд превышено в C:\wamp64\ www\staff-test\vendor\doctrine\orm\lib\Doctrine\ORM\Query.php в строке 406**
Если, например, в действии whoIsOnlineAction() отображается _users.html.twig, переменная $users доступна только в этом шаблоне. означает, что этот код {{ render(controller('App\\Controller\\UserController:whoIsOnlineAction')) }} не сделает {{ пользователей }} доступными в layout.html.twig. Вам лучше следовать инструкции, которую я дал.
Да, но не узнавать пользователей. С
return $this->render('bundles/StaffBundle/header-content.html.twig', array('users' => $users));я получил эту ошибку Переменная «пользователи» не существует.