symfony 3无法设置会话变量

时间:2017-06-10 21:46:01

标签: php symfony session

我是Symfony的新手,这让我在设置会话时遇到了困难。

我不确定会话设置应该是什么,因此我尝试创建一个单独的类来处理所有与会话相关的函数。

我知道$ request对象包含所有会话信息,但是在控制器中访问它会让我感到厌烦。

另一方面,我可以访问它,甚至可以在Twig上更改它,但这不是处理这个问题的正确方法,我理解。

实际上,它会抛出错误

  

在null

上调用成员函数set()

上的

  

$ session-> set('cart_ads',10);

SessionManagerController.php文件中的

行。所以它似乎没有创建设置为null的$ session变量。

这是设置:

在app_dev.php上,即前端控制器。

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Debug\Debug;
use Symfony\Component\HttpFoundation\Session\Session;
use AppBundle\Controller\SessionManagerController;


/** @var \Composer\Autoload\ClassLoader $loader */
$loader = require __DIR__.'/../app/autoload.php';
Debug::enable();

$kernel = new AppKernel('dev', true);
//$kernel->loadClassCache();
$request = Request::createFromGlobals();
SessionManagerController::sessionAction($request);//error here***
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

SessionManagerController.php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class SessionManagerController extends Controller
{

    public function sessionAction(Request $request)
    {
        $session = $request->getSession();
        $session->set( 'cart_ads', 10 ); //error here***

    } 
}

1 个答案:

答案 0 :(得分:1)

session无法使用$request,因为您在致电SessionManagerController::sessionAction($request);之前致电$kernel->handle($request)。在致电session时,Symfony会将request附加到$kernel->handle($request)

$kernel = new AppKernel('dev', true);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);

// this method has to be called after you call $kernel->handle($request)
// so you will have session object attached to $request
SessionManagerController::sessionAction($request);

$response->send();
$kernel->terminate($request, $response);