Php Symfony 4启动会话
新来的symfony,我正在尝试开始我的第一次课程 下面是我的全部代码,位于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
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。