我想显示活动用户列表。我在项目上使用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 => ...])。”)。
答案 0 :(得分: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')) }}
它将呈现该代码段。