从Symfony中的AppKernel.php中获取会话变量

时间:2016-07-19 20:30:41

标签: php symfony

PHP和Symfony相当新:我如何从AppKernel.php中包含的include文件中访问各种会话变量?我正在使用Symfony 2.8。我已经成功测试了以下内容,但未经正式批准。我更喜欢使用Symfony对象来访问会话。

session_start();
if (isset($session['userid'])) {
    $userid = $_SESSION['_sf2_attributes']['userid'];
}

我尝试使用以下内容从Symfony Request对象获取会话,但它看起来像" Request :: createFromGlobals"正在创建另一个Request对象而不是从现有Request对象创建Request对象。

use Symfony\Component\HttpFoundation\Request;

require_once '/var/www/html/vendor/autoload.php';

...

$request = Request::createFromGlobals();
$session = $request->get('session');

$ session变量返回null。

1 个答案:

答案 0 :(得分:0)

您可以在事件侦听器中访问会话变量。以下是kernel.request事件的监听器示例:

services:
    app.security:
        class: AppBundle\EventListener\Security
        arguments: [@session]
        tags:
        - { name: kernel.event_listener, event: kernel.request, method: checkAccess }

AppBundle \ EventListener \ Security类的一部分:

namespace AppBundle\EventListener;

use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;

class Security
{
    /**
     * @var \Symfony\Component\HttpFoundation\Session\Session
     */
    protected $session;

    /**
     * The constructor.
     *
     * @param Session         $session
     */
    public function __construct(Session $session)
    {
        $this->session = $session;
    }

    /**
     * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event
     */
    public function checkAccess(GetResponseEvent $event)
    {
        // Do what you like...
    }
}