我是Symfony的新手,这让我在设置会话时遇到了困难。
我不确定会话设置应该是什么,因此我尝试创建一个单独的类来处理所有与会话相关的函数。
我知道$ request对象包含所有会话信息,但是在控制器中访问它会让我感到厌烦。
另一方面,我可以访问它,甚至可以在Twig上更改它,但这不是处理这个问题的正确方法,我理解。
实际上,它会抛出错误
上的在null
上调用成员函数set()
SessionManagerController.php文件中的$ session-> set('cart_ads',10);
行。所以它似乎没有创建设置为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***
}
}
答案 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);