Php symfony 3无法设置会话变量
我是新来的Symfony,这给了我一个艰难的时间设置会议 我不确定会话设置应该是什么,所以我尝试创建一个单独的类来处理所有与会话相关的函数 我知道$request对象包含所有会话信息,但在控制器中访问它却让我不知所措 另一方面,我可以访问它,甚至在Twig上更改它,但这不是处理这个问题的正确方法,我理解 实际上,它抛出了一个错误 在null上调用成员函数集() 在 $session->set('cart\u ads',10) 在SessionManagerController.php文件中。因此,它似乎没有创建设置为null的$session变量 以下是设置: 在app_dev.php上,即前端控制器Php symfony 3无法设置会话变量,php,symfony,session,Php,Symfony,Session,我是新来的Symfony,这给了我一个艰难的时间设置会议 我不确定会话设置应该是什么,所以我尝试创建一个单独的类来处理所有与会话相关的函数 我知道$request对象包含所有会话信息,但在控制器中访问它却让我不知所措 另一方面,我可以访问它,甚至在Twig上更改它,但这不是处理这个问题的正确方法,我理解 实际上,它抛出了一个错误 在null上调用成员函数集() 在 $session->set('cart\u ads',10) 在SessionManagerController.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***
}
}
您请求的
会话
在$request
中不可用,因为您调用了SessionManagerController::sessionAction($request)代码>在调用$kernel->handle($request)
之前。在调用$kernel->handle($request)
时,Symfony将会话
附加到请求
您试图从app.php调用sessionAction没有任何意义。在常规控制器操作中,您可以访问会话。“我知道$request对象包含所有会话信息,但在控制器中访问它却让我逃避了”这是什么意思?@Cerad,实际上我正在使用Symfony 3.2.8,因此SessionInterface不可用。我确实尝试过注入Request$Request,但它抛出一个错误,说我没有提供$Request的实例。最后,它按照Rendy Eko Prastiyo的回答工作,但我希望在控制器中完成。我怀疑您正在尝试将您以前的php会话经验应用到Symfony框架中?在试图改变框架的工作方式之前,最好先了解框架的现状。我看不到会话管理器代码的任何用例,当然也没有理由从app.php调用它。如果您试图在每个请求上执行代码,那么可以看看内核侦听器。我认为,在您实施了更多操作之后,您可能会更好地了解Symfony中如何使用会话。祝你好运,谢谢。你知道为什么它不能在控制器内工作吗?因为你的控制器
是在内核
句柄
应用程序之前被调用的。handle
方法是Symfony
的核心。如果你想了解更多关于handle
方法的魔力,你可以学习它。如果要在主控制器
之外修改会话,可以使用。
$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);