Php Symfony 4启动会话

Php Symfony 4启动会话,php,symfony,symfony4,Php,Symfony,Symfony4,新来的symfony,我正在尝试开始我的第一次课程 下面是我的全部代码,位于public/php/session.php下: use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\HttpFoundation\Session\SessionInterface; $session = new Session(); $session->start(); 我收到错误未捕获错误:找不到类'Symf

新来的symfony,我正在尝试开始我的第一次课程

下面是我的全部代码,位于
public/php/session.php
下:

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

$session = new Session();
$session->start();
我收到错误
未捕获错误:找不到类'Symfony\Component\HttpFoundation\Session\Session'

phpstorm没有错误,我需要安装模块吗?我尝试了
composer require session
,但没有成功

我还在
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');
  }

 }

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

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

config/packages/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');
}
就这些。在中查看更多信息



您的代码不在框架内,它不会工作,因为没有自动加载程序从composer加载组件,如果您包含vendor/autoload.php,它会工作,但不要这样做

正如@Robert所提到的,由于您的代码在
public/php
中,它不知道自动加载程序,它告诉php文件相对于其名称空间(PSR-0或PSR-4)的位置

我认为混淆之处在于,您的
公共索引函数
不会自动启动会话,因为Symfony不会调用它,除非您导航到
index()
函数,并且必须返回
响应
。尝试将会话传递到
主页
方法参数,并在浏览器中导航到它

use Symfony\Component\HttpFoundation\Session\SessionInterface;

class HomeController extends AbstractController 
{

  /**
   * @Route("/", name="home")
   */
  public function homepage(SessionInterface $session)
  {
    $session->set('foo', 'bar');

    return $this->render('home.html.twig');
  }

 }

对不起,我忘了提,我也试过了。我把它放在我的家庭控制器里;网站已加载,但我的浏览器中没有会话cookie??symfony文档说会话应该使用
集合创建?我将更新我的问题检查您的PHP会话配置,然后检查PHP.ini中的f.e,因为当您将handler设置为~时,symfony只使用phpI中的本机会话配置,我的应用程序中没有PHP.ini。如果我只是把
session\u start()
这个简单的php方式放在配置中,然后清除缓存,它应该可以工作。请确保您没有自己启动会话尝试使用
php composer.phar dump autoload-o
,请参阅我关于您通常希望在传递给控制器的
/src
中创建服务的回答,与放入您的
/public
路径相反。尝试从我的网站文件夹中获取
命令时,我无法打开输入文件:composer.phar
好奇您如何调用
public/php/session.php
,不要认为
composer dump autoload-o
技巧会起作用,除非您是从控制器中加载它,因为
session.php
不包括从
-o
标志中受益的自动加载程序。好吧,我现在回到官方方法(如问题中所述);无错误,但未获取任何会话cookie您的索引方法未返回任何响应,因此不会返回cookie。