как получить доступ к переменной $ _SESSION в symfony2

0

Я пытаюсь сделать следующее:

        $postfields = array_merge($_SERVER, array("p"=>$_POST, "s"=>$_SESSION));
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_POST, count($postfields));
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postfields));
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);

почему это не работает? Это всегда дает мне ошибку, что $ _SESSION не существует.

  • 0
    Какое точное сообщение об ошибке?
Теги:
session

3 ответа

2
Лучший ответ

Symfony использует специальную библиотеку сеансов, которая расширяет интерфейс PHP $_SESSION. Чтобы получить доступ ко всем атрибутам сеанса в виде массива key => value, вы можете использовать (из любого контроллера/контейнера):

$all_session_variables = $this->get('session')->all(); // Returns array() format

Или конкретный элемент сеанса, используя:

$key_session_variable = $this->get('session')->get('key'); // Returns the value stored in "key"

Но это гарантируется только при условии, что вы предварительно установили переменные сеанса, используя $this->get('session')->set().

Подробнее об управлении сеансами читайте в документах Symfony.

На то, почему вы получаете ошибку " $_SESSION не существует": вы не объявили session_start() ! Symfony еще не сделал этого для вас. Но ЖДИТЕ. НЕ записывайте этот код, так как указанная выше ссылка выше:

Сеансы Symfony предназначены для замены нескольких собственных функций PHP. Приложениям следует избегать использования session_start(), session_regenerate_id(), session_id(), session_name() и session_destroy() и вместо этого использовать API в следующем разделе.

Вместо этого вы должны использовать библиотеку сеансов, предоставляемую Symfony, потому что:

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

1

Чтобы получить сеанс, попробуйте сделать это в своем контроллере:

$session = $this->get('session');
0

рекомендуемый способ (в контроллере):

...

public function testAction(Request $request)
{
    $session = $request->getSession();
}

...

или путем ввода RequestStack (в CustomService):

private $requestStack;

public function __construct(RequestStack $requestStack)
{
    $this->requestStack = $requestStack;
}

public function myMethod()
{
    $session = $this->requestStack->getCurrentRequest()->getSession();
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню