【发布时间】:2017-06-10 21:46:01
【问题描述】:
我是 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***
}
}
【问题讨论】:
-
您尝试从 app.php 调用 sessionAction 毫无意义。在常规控制器操作中,您可以访问会话。 symfony.com/doc/current/controller.html#managing-the-session
-
“我知道 $request 对象包含所有会话信息,但在控制器中访问它让我无法理解”是什么意思。 ?
-
@Cerad,实际上我正在使用 Symfony 3.2.8,所以 SessionInterface 不可用。我确实尝试过注入 Request $request,但它抛出了一个错误,说我没有提供 $request 的实例。最后它按照 Rendy Eko Prastiyo 的回答工作,但我想在控制器内完成。
-
我怀疑您正在尝试将您以前的 php 会话经验应用到 Symfony 框架?在尝试改变它的工作方式之前,通常最好尝试学习框架的现状。我看不到您的会话管理器代码的用例,当然也没有理由从 app.php 调用它。如果您尝试在每个请求上执行代码,那么可以查看内核侦听器。我认为在您实施更多操作之后,您可能会对 Symfony 中如何使用会话有更好的了解。祝你好运。