Я пытаюсь сделать следующее:
$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 не существует.
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, потому что:
Хотя рекомендуется явно начать сеанс, сеансы фактически начнутся по требованию, то есть если какой-либо запрос сеанса будет сделан для чтения/записи данных сеанса.
Чтобы получить сеанс, попробуйте сделать это в своем контроллере:
$session = $this->get('session');
рекомендуемый способ (в контроллере):
...
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();
}