Ответ 1
$response->headers->getCookies();
должен вернуть массив файлов cookie в класс ResponseHeaderBag для получения дополнительной информации об этой функции
Я хочу сохранить некоторую информацию в локальном браузере. После нескольких часов поиска хорошего учебника мне удалось сохранить некоторые данные в несеансовом файле cookie:
контроллер - indexAction()
$cookieGuest = array(
'name' => 'mycookie',
'value' => 'testval',
'path' => $this->generateUrl('my_route'),
'time' => time() + 3600 * 24 * 7
);
$cookie = new Cookie($cookieGuest['name'], $cookieGuest['value'], $cookieGuest['time'], $cookieGuest['path']);
$response = new Response();
$response->headers->setCookie($cookie);
$response->send();
Интересно, правильно ли это. Кроме того, я попробовал несколько способов прочитать куки с компонентом HttpFoundation, но безуспешно. Есть ли другой способ доступа к файлу cookie через $_ COOKIE ['mycookie']?
Вот где я пытаюсь прочитать файл cookie
контроллер - cookieAction()
public function cookieAction($_locale, $branch, $page)
{
$response = new Response();
$cookies = $response->headers->getCookies();
var_dump($cookies);
// TODO: Get params for indexAction from cookie if available
return $this->indexAction($_locale, $branch, $page);
}
$response->headers->getCookies();
должен вернуть массив файлов cookie в класс ResponseHeaderBag для получения дополнительной информации об этой функции
Это правильный способ настройки файла cookie. Чтобы прочитать файл cookie, уже написанный в браузере, выполните следующие действия:
$request->cookies->get('myCookie');
Но после того, как я создал файл cookie в объекте $response:
$cookie = new Cookie('myCookie', 'contentOfMyCookie');
$response = new Response();
$response->headers->setCookie($cookie);
Я вызываю этот метод:
$response->headers->getCookies();
Я получаю массив куки файлов, которые должны быть написаны в браузере, а не те, которые уже существуют.
Образно, между $request и $response существует время выполнения кода контроллера.
Кроме того, в шаблоне ветки можно использовать
{{ app.request.cookies.get('myCookie') }}
вы получаете значение cookie, уже написанного в браузере, а не из объекта $response! Недавно созданный cookie из браузера вы можете читать только после перезагрузки страницы (ajax не нужно перезагружать целую страницу).
Подводя итог, вы можете читать файлы cookie с помощью объекта $request и создавать их с помощью объекта $response. (Очевидно, по некоторым причинам вы также можете прочитать куки файлов ответов $response - но это довольно редкие ситуации).
это может быть полезно для тех, кто пытается сделать файлы cookie в symfony2:
use Symfony\Component\HttpFoundation\Cookie;
Пример использования файлов cookie и сеанса:
<?php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Response;
class DefaultController extends Controller
{
public function indexAction()
{
// Set session value
$session = $this->getRequest()->getSession();
$session->set('test', 1);
// Get session value
$value = $session->get('test');
// Set cookie value
$response = new Response();
$cookie = new Cookie('test', 1, time()+3600);
$response->headers->setCookie($cookie);
// Get cookie value
$this->getRequest()->cookies->get('test');
}
}
Более интересные информационные ссылки cookie (компонент http_fundation для symfony2):
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Response;
// set current active tab in cookie
$cookie = new Cookie('myProfileActiveTab', 'myaddress', strtotime('now + 60 minutes'));
$response = new Response();
$response->headers->setCookie($cookie);
$response->send();
// get current active tab from cookies
$cookies = $request->cookies;
if ($cookies->has('myProfileActiveTab')) {
$activetab = $cookies->get('myProfileActiveTab');
}