Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.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
Php symfony 3无法设置会话变量_Php_Symfony_Session - Fatal编程技术网

Php symfony 3无法设置会话变量

Php symfony 3无法设置会话变量,php,symfony,session,Php,Symfony,Session,我是新来的Symfony,这给了我一个艰难的时间设置会议 我不确定会话设置应该是什么,所以我尝试创建一个单独的类来处理所有与会话相关的函数 我知道$request对象包含所有会话信息,但在控制器中访问它却让我不知所措 另一方面,我可以访问它,甚至在Twig上更改它,但这不是处理这个问题的正确方法,我理解 实际上,它抛出了一个错误 在null上调用成员函数集() 在 $session->set('cart\u ads',10) 在SessionManagerController.php文件中。因此

我是新来的Symfony,这给了我一个艰难的时间设置会议

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

我知道$request对象包含所有会话信息,但在控制器中访问它却让我不知所措

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

实际上,它抛出了一个错误

在null上调用成员函数集()

$session->set('cart\u 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***

    } 
}

您请求的
会话
$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);