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
,但没用
我还在handler_id: ~
中用config/packages/framework.yaml
尝试了symfony doc方法
使用此方法,没有错误消息,也没有会话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');
}
}
答案 0 :(得分:0)
如果您使用整个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');
}
仅此而已。在https://symfony.com/doc/current/controller.html#session-intro
中查看更多您的代码不在框架内,并且不会运行,因为没有自动加载器可以从composer加载组件,如果您包含了vendor / autoload.php,则可以正常工作,但不要那样做。
答案 1 :(得分:0)
如@Robert所述,由于您的代码位于public/php
之内,因此它不知道自动加载器,该自动加载器告诉PHP文件相对于其命名空间(PSR-0或PSR-4)位于何处。 / p>
我相信您的public index function
不会自动启动会话,因为除非您导航到index()
函数并且必须返回Response
,否则Symfony不会调用它。尝试将会话传递给您的homepage
方法参数,然后在浏览器中导航到它。
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');
}
}