2016-02-07 2 views
2

Я использовал Slim Framework 2 некоторое время, но хочу перейти на самую новую версию 3. При чтении upgrade guide я был немного оскорблен про них, просто заявив, что «куки были удалены из ядро "и ссылаясь на FIG Cookies github repo, содержащий фрагменты кода, которые просто не работают с Slim.Slim 3 Framework + Cookies

Может ли кто-нибудь поделиться некоторыми фрагментами рабочего кода, которые устанавливают и получают некоторые куки-файлы, используя Slim 3? Благодарю.

+0

Была ли вы установлена ​​библиотека 'dflydev/dflydev-fig-cookies' с композитором для ее использования? Поскольку ** FIG Cookies ** - автономная библиотека, поддерживающая стандарт PSR-7 для управления кукисами, а не частью Slim Framework. –

ответ

3

Если вы не хотите использовать проверенную PSR-7 библиотеки FIG Cookies вы можете использовать это:

namespace Your\App; 

use Psr\Http\Message\ResponseInterface as Response; 
use Psr\Http\Message\ServerRequestInterface as Request; 

class Cookie 
{ 
    /** 
    * @param Response $response 
    * @param string $key 
    * @param string $value 
    * @return Response 
    */ 
    public function deleteCookie(Response $response, $key) 
    { 
     $cookie = urlencode($key).'='. 
      urlencode('deleted').'; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; secure; httponly'; 
     $response = $response->withAddedHeader('Set-Cookie', $cookie); 
     return $response; 
    } 

    /** 
    * @param Response $response 
    * @param string $cookieName 
    * @param string $cookieValue 
    * @return Response 
    */ 
    public function addCookie(Response $response, $cookieName, $cookieValue) 
    { 
     $expirationMinutes = 10; 
     $expiry = new \DateTimeImmutable('now + '.$expirationMinutes.'minutes'); 
     $cookie = urlencode($cookieName).'='. 
      urlencode($cookieValue).'; expires='.$expiry->format(\DateTime::COOKIE).'; Max-Age=' . 
      $expirationMinutes * 60 . '; path=/; secure; httponly'; 
     $response = $response->withAddedHeader('Set-Cookie', $cookie); 
     return $response; 
    } 

    /** 
    * @param Request $request 
    * @param string $cookieName 
    * @return string 
    */ 
    public function getCookieValue(Request $request, $cookieName) 
    { 
     $cookies = $request->getCookieParams(); 
     return isset($cookies[$cookieName]) ? $cookies[$cookieName] : null; 
    } 

} 
+1

Хороший ответ. Однако при удалении файла cookie используйте пустой текст как значение для удалённого файла cookie. Ваш собственный метод 'getCookieValue' вернет значение null, пытаясь получить куки-файл, удаленный' deleteCookie'. Более последовательный (по крайней мере, для меня). –

3

I'was испытывают те же проблемы, но, после нескольких попыток, я выяснил! Прежде всего, необходимо использовать:

$cookies = Dflydev\FigCookies\Cookies::fromRequest($request); 

Чтобы получить все куки, посланные клиентом. Или:

$cookie = FigRequestCookies::get($request, $cookiename); 

Чтобы получить один печенье. Но «странная» часть, как установить кук, так вот небольшой пример:

function setCookie($response, $name, $value){ 
    $response = FigResponseCookies::set($response, SetCookie::create($name) 
                  ->withValue($value) 
                  ->rememberForever() 
              ); 
    return $response; 
} 

С:

$response = FigResponseCookies::set($response, SetCookie::create($name) 
                  ->withValue($value) 
                  ->rememberForever() 
              ); 

Вы добавите новое печенье на запрос, этот метод возвращает новый объект запроса с новым куки-файлом в нем. Итак, для всех других операций вам нужно использовать новый запрос, а не старый. Надеюсь, это поможет. , если вы хотите опубликовать свой код, и мы попытаемся его отладить.

+0

Когда я использую функцию get и получаю файлы cookie из запроса, он показывает, что файл cookie всегда существует там, где он этого не делает :( –

+0

Как вы узнали, что файл cookie не существует? – Norman

+0

Вы делаете $ cookie-> getValue() === null? «Я не существую»: «Я существую»; https://stackoverflow.com/questions/47201908/cant-get-cookies-in-slim3-using-dflydev-library?noredirect= 1 # comment81353899_47201908 –

Смежные вопросы