2014-09-04 2 views
3

Я использую symfony 2.5, и у меня есть следующая услуга для монолога.symfony2 пустой идентификатор сеанса в службе

<?php 

namespace Megogo\CoreBundle; 

use Symfony\Component\HttpFoundation\Session\Session; 

class SessionRequestProcessor 
{ 
    /** 
    * @var \Symfony\Component\HttpFoundation\Session\Session 
    */ 
    protected $session; 

    /** 
    * @var 
    */ 
    private $token; 

    public function __construct(Session $session) 
    { 
     $this->session = $session; 
    } 

    public function processRecord(array $record) 
    { 

     if (null === $this->token) { 
      try { 
       $this->token = $this->session->getId(); 
      } catch (\RuntimeException $e) { 
       $this->token = '????????'; 
      } 

     } 
     $record['extra']['token'] = $this->token; 

     return $record; 
    } 
} 

service.yml

services: 
    monolog.formatter.session_request: 
     class: Monolog\Formatter\LineFormatter 
     arguments: 
      - "[%%datetime%%] [%%extra.token%%] %%channel%%.%%level_name%%: %%message%%\n" 

    monolog.processor.session_request: 
     class: Megogo\CoreBundle\SessionRequestProcessor 
     arguments: ["@session"] 
     tags: 
      - { name: monolog.processor, method: processRecord } 

я пример из официальной документации. Adding a Session/Request Token

У меня проблема, это $this->session->getId() возвращение пустой строка. Если я добавлю $session->start(); все работает. Я могу получить идентификатор сеанса. Но это странно, потому что в других моих сервисах все работает без этого обходного пути. И когда я делаю app/console cache:clear у меня есть ошибки Failed to start the session: already started by PHP.

+0

ли вы когда-нибудь решить эту проблему? Мне тоже это нужно –

+0

@JoeYahchouchi Извините, но нет, я не решил :( – denys281

ответ

0

Официальные документы говорит:

Symfony сессии несовместимы с php.ini директива session.auto_start = 1 Эта директива должна быть отключена в php.ini, в директивах веб-сервера или в .htaccess.

Возможно, попробуйте это?

+0

Спасибо, но я уже отключил этот параметр. – denys281

2

У меня была аналогичная проблема.

Я решил, добавив в контроллере

$this->get('session')->start(); 

В вашем случае вы можете просто добавить следующую строку, прежде чем пытаться получить ID сессии

$this->session->start(); 

Не беспокойтесь о вызове «start()», когда сеанс уже запущен - он будет проверять и просто пропускать (повторно) его запуск.

ток (2,6) версия Symfony не имеет config property, который заставит сессионный auto_start