CakePHP3.5でCookieComponentが非推奨になり、Cookieの読み書きに苦労した話

従来通りのCookieComponentを使用しない読み書きってどうすりゃいいの?
ですごく迷ったので下記をメモします。

CakePHP3.4以前での書き方

従来通りCookieComponentを使用した書き方です。
ただし、CakePHP3.5以降では@deprecatedで削除予定です。
もう書いてあるソースは別として以後こちらは使用しないようにしましょう。
以下Cake3.4以前のControllerでのCookieComponentの使い方

// Componentの読み込み
public function initialize()
{
    $this->loadComponent('Cookie');
}
// あるいこう読み込む
public $components = ['Cookie'];

// 読み
$this->Cookie->read(key);

// 書き
$this->Cookie->write(key, value);

// 削除
$this->Cookie->delete(key);

CakePHP3.5以降での推奨される書き方

CakePHP3.4あたりから徐々に破壊的メソッドが廃止になりました。
CakePHP3.5でCookieComponentは非推奨となりましたが、
今だにネット上の情報ではCookieComponentを使ったCookie操作の情報が多く、
Cakeのドキュメントの書き方が不親切で分かりづらかったのでメモします。

バージョン 3.5.0 で撤廃: CookieComponent の代わりに クッキー暗号化ミドルウェア を使用してください。

僕の読解力がないだけかもしれないけど、こんな書き方されたら
「クッキー暗号化ミドルウェア」で読み書きしなきゃいけないみたいじゃないっすか。

すげー迷いましたよマジで。
あと警告からのリンク先も悪い…

「クッキー暗号化ミドルウェア」はその名の通り「Cookie暗号化する時はこのミドルウェア使ってね」なものだし、
大体の人が知りたいのは、肝心なCookieの読み書きどうすりゃいいの?ってとこなんですよ。

こっちに書いてあんだからこっちをリンクしといてくれよほんとに…
以下CakePHP3.5以降の書き方。

// 読み
$cookieValue = $this->request->getCookie(key);

// 書き
$this->response = $this->response->withCookie($cookieKey, $data);

// 削除
$this->response = $this->response->withExpiredCookie($cookieKey);

ちなみに暗号化については下記の記事を試したら上手くいきましたので、
執筆者の方に感謝しつつ、参考にしてみてください。
https://blog.ando-suguru.me/using-encryptedcookiemiddleware-with-cakephp-3-5.html

以上ご参考までに。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.