Return 渲染模板中的一个数组
Return an array during rendering template
我想显示活跃用户列表。我在我的项目中使用 FOSUserBundle。我在我的用户 table 上创建了一个字段,它将包含最后一个用户 activity 的日期和时间,并且我创建了一个侦听器:
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')) }}
但是当我尝试登录到一个简单的用户时,我得到了这个错误:
在呈现模板("The controller must return a "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')) }}
它将呈现该片段。
我想显示活跃用户列表。我在我的项目中使用 FOSUserBundle。我在我的用户 table 上创建了一个字段,它将包含最后一个用户 activity 的日期和时间,并且我创建了一个侦听器:
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')) }}
但是当我尝试登录到一个简单的用户时,我得到了这个错误: 在呈现模板("The controller must return a "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')) }}
它将呈现该片段。