[PHP]Slim3 でcookieを管理するクラスを作る

カテゴリ: SlimFramework

PHPのSlim3 Frameworkでcookieを管理するためのクラスです。

stackoverflowにあったコードを元に一部改修してます。
https://stackoverflow.com/questions/35257522/slim-3-framework-cookies

<?php

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

class Cookie
{
    /**
     * keyを指定してcookieの値を取得する
     * @param Request $request
     * @param string $key
     * @param string $defaultValue
     * @return string
     */
    public function get(Request $request, $key, $defaultValue = null)
    {
        $cookies = $request->getCookieParams();
        return isset($cookies[$key]) ? $cookies[$key] : $defaultValue;
    }

    /**
     * 全てのcookie値を取得する
     * @param Request $request
     * @return array
     */
    public function getAll(Request $request)
    {
        return $request->getCookieParams();
    }

    /**
     * cookieに値をセットする
     * @param Response $response
     * @param string $key
     * @param string $value
     * @return Response
     */
    public function set(Response $response, $key, $value, $expirationMinutes = 60)
    {
        $expiry = new \DateTimeImmutable('now + '.$expirationMinutes.'minutes');
        $cookie = urlencode($key) . '=' . urlencode($value) .
            '; expires=' . $expiry->format(\DateTime::COOKIE) .
            '; Max-Age=' . $expirationMinutes * 60 .
            '; path=/' .
            '; httponly';
        $response = $response->withAddedHeader('Set-Cookie', $cookie);
        return $response;
    }

    /**
     * cookieから値を削除する
     * @param Response $response
     * @param string $key
     * @param string $value
     * @return Response
     */
    public function delete(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;
    }
}
こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。