Возврат массива во время рендеринга шаблона

Я хочу отобразить список активных пользователей. Я использую 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 => ...]).").

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
274
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно создать ветку шаблона фрагмента, который вы хотите отобразить в своем основном шаблоне. Например, давайте назовем его _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')) }}

Он отобразит этот фрагмент.

Да, но не узнавать пользователей. С return $this->render('bundles/StaffBundle/header-content.html.twig'‌​, array('users' => $users)); я получил эту ошибку Переменная «пользователи» не существует.

M'hamed Lalami 16.06.2019 15:46

Я не понимаю шаблон, который вы хотите отобразить. Если это сторонний пакет, вам нужно прочитать его документы, чтобы узнать, как переопределить методы его контроллера.

Salim Ben Aissa 16.06.2019 18:05

У меня есть мой layout.html.twig в папке templates/bundle/FOSUserBundle, и в этом макете я добавил {% extends 'base.html.twig' %} {% block content %} {{ render(controller('App\\Controller\\UserController:whoIsOnli‌​neAction')) }} <ul> {% for user in users %} <li>{{ user.username}}</li> {% endfor %} </ul> {% endblock content %}, но теперь я ничего не вижу, и мой сервер выключается ** Максимальное время выполнения 120 секунд превышено в C:\wamp64\ www\staff-test\vendor\doctrine\orm\lib\Doctrine\OR‌​M\Query.php в строке 406**

M'hamed Lalami 17.06.2019 03:02

Если, например, в действии whoIsOnlineAction() отображается _users.html.twig, переменная $users доступна только в этом шаблоне. означает, что этот код {{ render(controller('App\\Controller\\UserController:whoIsOnli‌​neAction')) }} не сделает {{ пользователей }} доступными в layout.html.twig. Вам лучше следовать инструкции, которую я дал.

Salim Ben Aissa 17.06.2019 08:25

Другие вопросы по теме