Symfony 3.4 $ _SESSION в контроллере - PullRequest
0 голосов
/ 29 января 2019

У меня есть приложение, которое запускается в файле .php.В этом файле я делаю некоторую работу, но в конце я делаю две вещи, я генерирую значение и сохраняю в $_SESSION и перенаправляю на другой маршрут:

Этот php файл находится вне папки Symfony:

<?php
session_start();

...Do some work

$_SESSION['token'] = 'some value';
header ("Location: new direction");
?>

Перенаправление, перенаправляет в папку Symfony и запускает часть Symfony, переходя к моему src/AppBundle/Controller/MainController.

И в первом действии, которое обрабатывается в этом контроллере, мне нужно получить доступзначение $_SESSION['token'] для некоторой работы с этим значением в действии контроллера.Это контроллер:

<?php

namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;

class MainController extends Controller
{
    public function homepageAction(Request $request)
    {
        dump($_SESSION);
        die;

        ...Some work
    }
}
?>

dump($_SESSION) показывает это:

enter image description here

Но я не могу найти свой $_SESSION['token']

Нужно ли использовать какой-либо компонент Symfony для доступа к значениям PHP $ _SESSION внутри контроллера?

Или Как получить доступ к $_SESSION['token'] в контроллере?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Я перепробовал все то, что все вы предлагаете, и ничего не помогло мне, поэтому, читая пост на форуме, я нашел следующую строку:

php_value session.auto_start 0

Я положил это в свойФайл .htaccess и Symfony больше не перезаписывают переменную $_SESSION, и я могу получить к ней доступ в любом месте контроллера.

0 голосов
/ 29 января 2019

Лучший способ - создать маршрут, который принимает параметры токена, например сохранять параметры токена в сеансе и перенаправлять пользователя.

Если вам нужно продублировать это поведение для всех ваших маршрутов, используйте прослушиватель по запросуevent.

Редактировать: Больше информации о моем ответе

Шаг 1: Установить значение токена

Шаг 2: Перенаправить на маршрут Symfony, который принимает параметры токена

Шаг 3. Применение собственной логики на основе значения токена

<?php

namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\SessionInterface;


/**
 * @Route("/{token}", defaults={"token"=null})
 */
class MainController extends Controller
{

    public function homepageAction(Request $request, SessionInterface $session, ?string $token)
    {
        if ($token) {
            $session->set('token', $token);
        }

        ...Some work
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...