首页 > 解决方案 > Symfony 4 开始会话

问题描述

symfony 新手,我正在尝试开始我的第一个会话

这是我的整个代码,位于public/php/session.php

use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\SessionInterface;

$session = new Session();
$session->start();

我收到错误Uncaught Error: Class 'Symfony\Component\HttpFoundation\Session\Session' not found

phpstorm 没有错误,我需要安装一个模块吗?我试过composer require session了,但这不起作用

我还尝试了 symfony dochandler_id: ~方法config/packages/framework.yaml

使用此方法,没有错误消息,但也没有会话 cookie

这是我的控制器:

class HomeController extends AbstractController {

 // start session

  public function index(SessionInterface $session) {
   $session->set('foo', 'bar');
   $session->get('foo');
  }

  /**
  * @Route("/", name="home")
  */

  public function homepage(){
   return $this->render('home.html.twig');
  }

 }

标签: phpsymfonysymfony4

解决方案


如果您使用整个 symfony 框架,它会在您读取、写入甚至检查会话中是否存在数据时自动启动会话。您无需手动执行此操作。

您需要做的是定义一个您将使用的适配器或将其留给 php configruation

配置/包/framework.yaml

framework:
+     session:
+         # The native PHP session handler will be used
+         handler_id: ~

然后在您的服务中,控制器只需获得会话服务

启用 SF4 和自动接线,在控制器动作中

public function index(SessionInterface $session)
{
       $session->set('foo', 'bar');
       $session->get('foo');
}

就这样。在https://symfony.com/doc/current/controller.html#session-intro中查看更多信息


您的代码不在框架内,它不会工作,因为没有自动加载器可以从作曲家加载组件,如果您包含 vendor/autoload.php 但不这样做,它会工作。


推荐阅读