【问题标题】:Implementing user activity in symfony 2在 symfony 2 中实现用户活动
【发布时间】:2011-08-30 18:49:33
【问题描述】:

在 symfony 2 中实现用户活动的最佳方式是什么?

怎么做呢?

我知道有symfony 2的事件系统。也许我应该触发一个事件?

更新每个页面请求是否明智,或者是否有其他(更好的)方法来更新用户活动?

【问题讨论】:

  • 用户活动是什么意思?
  • 嗯,我有一个有用户的网站,并且网站上有浏览活动。活跃意味着他们正在页面之间浏览。

标签: php symfony doctrine-orm


【解决方案1】:

跟踪用户请求(可能还有他们的活动)的好方法是监听 kernel.request 事件:

监听类:

namespace Acme\YourBundle\EventListener;

use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\DependencyInjection\ContainerInterface;

class RequestListener
{
    /**
     * Container
     *
     * @var ContainerInterface
     */
    protected $container;

    /**
     * Listener constructor
     *
     * @param ContainerInterface $container
     */
    public function __construct(ContainerInterface $container)
    {
        $this->container = $container;
    }

    /**
     * kernel.request Event
     *
     * @param GetResponseEvent $event
     */
    public function onKernelRequest(GetResponseEvent $event)
    {
        $request  = $event->getRequest();

        // Here you can intercept all HTTP requests, and through $container get access to user information
    }
}

监听器的配置:

<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <parameters>
        <parameter key="acme.request_listener.class">Acme\YourBundle\EventListener\RequestListener</parameter>
    </parameters>

    <services>
        <service id="acme.request_listener" class="%acme.request_listener.class%">
            <tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" />
            <argument type="service" id="service_container" />
        </service>
    </services>
</container>

您可以在 Symfony 官方文档中获得有关此主题的更多信息:

【讨论】:

  • 感谢您的回复,我想我现在已经掌握了足够的信息来构建它!
【解决方案2】:
public function onKernelController(FilterControllerEvent $event)
{

    $controller = $event->getController();
    if ($controller[0] instanceof Controller  and (!strpos( get_class($controller[0]), 'App\FrontendBundle')===false) ) {

  }
}

【讨论】:

  • 仅代码的答案是不受欢迎的。请解释你做了什么以及为什么这是“最好的方法”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-06
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
相关资源
最近更新 更多