Чтение и запись файлов cookie в Symfony2 - PullRequest
28 голосов
/ 11 октября 2011

Я хочу сохранить некоторую информацию в локальном файле cookie браузера. После нескольких часов поисков хорошего учебника мне удалось сохранить некоторые данные в несессионном 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();

Интересно, это правильный путь? Кроме того, я попробовал несколько способов прочитать cookie с помощью компонента HttpFoundation, но безуспешно. Есть ли другой способ, кроме доступа к cookie через $ _ COOKIE ['mycookie'] ?

Здесь я пытаюсь прочитать печенье

контроллер - 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);
}

Ответы [ 6 ]

70 голосов
/ 07 мая 2013

Это правильный способ установки cookie. Чтобы прочитать cookie, уже записанные в браузере, выполните:

$request->cookies->get('myCookie');

Но после того, как я создал cookie в объекте $ response:

$cookie = new Cookie('myCookie', 'contentOfMyCookie');
$response = new Response();
$response->headers->setCookie($cookie);

Я называю этот метод:

$response->headers->getCookies();

Я получаю массив файлов cookie, которые нужно записать в браузере, а не те, которые там уже существуют.

Образно, между $ request и $ response существует время выполнения кода контроллера.

Кроме того, в шаблоне ветки вы можете использовать

{{ app.request.cookies.get('myCookie') }}

Таким образом, вы получаете значение файла cookie, уже записанного в браузере, а не объекта $ response! Вновь созданный файл cookie из браузера вы можете прочитать только после перезагрузки страницы (ajax не нужно перезагружать всю страницу).

Чтобы подвести итог, вы можете прочитать файлы cookie , используя $ request объект, и создать их с $ response объектом. (Очевидно, что по некоторым причинам вы также можете прочитать куки-файлы $ response - но это довольно редкие ситуации).

17 голосов
/ 17 декабря 2011

это может быть полезно для тех, кто пытается сделать куки в symfony2:

use Symfony\Component\HttpFoundation\Cookie;
17 голосов
/ 11 октября 2011
$response->headers->getCookies();

должен вернуть массив файлов cookie. Для получения дополнительной информации об этой функции обратитесь к классу ResponseHeaderBag

5 голосов
/ 21 апреля 2015

Пример использования файлов 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');
    }
}
2 голосов
/ 25 сентября 2017
            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');
           } 
1 голос
/ 20 сентября 2012

Более интересные ссылки на файлы cookie (компонент http_fundation для symfony2):

Компонент Symfony2 http_fundation

Symfony2 http_fundation api

Компонент Symfony2 http_fundation (испанский)

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