Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony2中的RequestListener_Symfony_Doctrine Orm - Fatal编程技术网

Symfony2中的RequestListener

Symfony2中的RequestListener,symfony,doctrine-orm,Symfony,Doctrine Orm,我正在使用symfony2.3。 我创建RequestListener并在用户登录时写入,然后执行返回主页操作 获得了一些奖励积分。这很有效。 但我如何才能做到这一点,只有当用户第一次回家行动时才能获得积分。如果用户回家行动超过一次,则不更新奖励积分 RequestListner.php <?php namespace XXX\ABCBundle\EventListener; use Symfony\Component\HttpKernel\Event\GetResponseEvent

我正在使用symfony2.3。 我创建RequestListener并在用户登录时写入,然后执行返回主页操作 获得了一些奖励积分。这很有效。 但我如何才能做到这一点,只有当用户第一次回家行动时才能获得积分。如果用户回家行动超过一次,则不更新奖励积分

RequestListner.php

<?php

namespace XXX\ABCBundle\EventListener;

use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Security\Core\SecurityContextInterface;
use Symfony\Component\HttpKernel\HttpKernel;
use Doctrine\ORM\EntityManager;
use Thinkdigit\UserBundle\Entity\User;


class RequestListener
{
/**
 * @var \Symfony\Component\Security\Core\SecurityContextInterface
 */
protected $securityContext;

protected $em;

/**
 * Container
 *
 * @var ContainerInterface
 */
protected $container;

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

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


$home     = array('XXX\ABCBundle\Controller\PageHomeController::indexAction', 'XXX\ABCBundle\Controller\RegistrationController::confirmedAction');


  //print_r($controller);die;
    if ( $this->container->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY'))
    {
        if(in_array($controller,$home)){
            $user = $this->container->get('security.context')->getToken()->getUser();
            //print_r($user->getRewardPoints());
            $point = '5';
            $rewrdPoint = $user->getRewardPoints() + $point;
            $user->setRewardPoints($rewrdPoint);
            $this->em->persist($user);
            $this->em->flush($user);
            //die;
        }
    }
    // Here you can intercept all HTTP requests, and through $container get access to user information
}
}

它与符号无关;最简单的方法是在会话中存储某个内容,并对其进行检查

比如,在打开登录用户的主页时,只需给他设置一个会话变量,并在处理请求侦听器之前检查会话变量

if($controller == $home && $this->container->get('session')->get('reward_was_payed', 0) != 1){
    $user = $this->container->get('security.context')->getToken()->getUser();
    //print_r($user->getRewardPoints());
    $point = '5';
    $rewrdPoint = $user->getRewardPoints() + $point;
    $user->setRewardPoints($rewrdPoint);
    $this->em->persist($user);
    $this->em->flush($user);

    $this->container->set('reward_was_payed', 1);
}

;

谢谢你的回答,你能再次看到我的问题吗?我变了$首页是数组。所以只要将if($controller==$home&&$this->container->get('session')->get('reward_was_payed',0)!=1){更改为if(in_array($controller,$home)&&&$this->container->get('session')->get('reward u was_was_payed',0)!=1){检查调试,如果设置了这个值,如果设置了session中的值,那么就不可能,get('session get')->get('session('reward_was_payed',0)必须返回1;在本例中,它无法执行这部分代码