Symfony 4开始会议

时间:2018-08-08 12:24:31

标签: 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();

我遇到错误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');
  }

 }

2 个答案:

答案 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');
  }

 }