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 doc с handler_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');
  }

 }

Попробуйте использовать php composer.phar dump-autoload -o, см. Мой ответ на Composer и производственный сервер Linux - автозагрузка не работает Как правило, вы хотите создать службу в /src, которую вы передаете своему контроллеру, а не помещать в свой путь /public.

Will B. 08.08.2018 14:46

попробовав команду из папки моего сайта, я получаю Could not open input file: composer.phar

Sam 08.08.2018 14:58

Любопытно, как вы вызываете public/php/session.php, но не думайте, что трюк с composer dump-autoload -o сработает, если вы не загружаете его из контроллера, поскольку session.php не включает автозагрузчик для использования флага -o.

Will B. 08.08.2018 15:00

Что ж, теперь я вернулся к официальному методу (как описано в вопросе); нет ошибок, но нет файла cookie сеанса

Sam 08.08.2018 15:05

Ваш метод индекса не возвращает никакого ответа, поэтому файлы cookie не будут отправлены обратно.

Cerad 08.08.2018 15:07

@Cerad, но в документации Symfony ничего не сказано о возврате? Я пробовал return $session и return $this->session безуспешно

Sam 08.08.2018 15:26

Это базовый протокол http. Подумайте об отказе от Symfony и напишите несколько базовых примеров, возможно, после php документы. Когда вы получите общее представление о том, как взаимодействуют серверы и браузеры, файлы cookie и сеансы, это станет ясным.

Cerad 08.08.2018 15:29
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
7
5 536
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы используете весь фреймворк Symfony, он запускает сеансы автоматически, когда вы читаете, записываете или даже проверяете наличие данных в сеансе. Вам не нужно делать это вручную.

Что вам нужно сделать, так это определить адаптер, который вы будете использовать, или оставьте его для настройки php в

конфигурация / пакеты / 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, но не пойдете по этому пути.

Извините, я забыл упомянуть, я тоже пробовал это. Я вставил его в свой домашний контроллер; Сайт загружается, но в моем браузере нет файла cookie сеанса ?? В документации по symfony сказано, что сеанс должен быть создан с помощью set? Я обновлю свой вопрос

Sam 08.08.2018 14:38

проверьте конфигурацию сеанса PHP, чем например, в php.ini, потому что, когда вы устанавливаете обработчик как ~, тогда symfony просто использует собственную конфигурацию сеанса из php

Robert 08.08.2018 15:17

В моем приложении нигде нет php.ini. если я просто поставлю session_start() простым способом php, он работает нормально

Sam 08.08.2018 15:28

если да, то поместите то, что я дал вам, в конфиг и очистите кеш, он должен работать. Убедитесь, что вы не начинаете сеанс самостоятельно

Robert 08.08.2018 15:29
Ответ принят как подходящий

Как упомянул @Robert, поскольку ваш код находится в public/php, он не знает об автозагрузчике, который сообщает PHP, где расположены файлы относительно их пространств имен (PSR-0 или PSR-4).

Я считаю, что путаница заключается в том, что ваш public index function не запускает сеанс автоматически, поскольку он не вызывается Symfony, если вы не перейдете к функции index() и не должны вернуть Response. Попробуйте передать сеанс аргументам метода 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');
  }

 }

Другие вопросы по теме