各フレームワークのバージョン違いで、サーバーリクエスト/レスポンスなどの情報の取得の違いが出てきますね。
今回、Cakephp3とCakephp4のカスタムクッキー値の取得の違いについて、忘備録として残しておきます。
※予めクッキー値を保存しておく必要があります。
以下は、Componentを利用時の例コードです。
Cakephp3でのクッキー値の取得
HogeComponent_Cake3
use Cake\Event\Event;
class HogeComponent extends Component
{
private $cookie;
public function startup(Event $event)
{
$this->cookie = $event->_subject->cookie;
}
}
Cakephp4でのクッキー値の取得
HogeComponent_Cake4
use Cake\Event\EventInterface;
class HogeComponent extends Component
{
private $cookie;
/**
* コントローラーの beforeFilter メソッドの後、コントローラーの現在のアクションハンドラの前にコール
*
* @param \Cake\Event\EventInterface $event イベントオブジェクト
* @return void
*/
public function startup(EventInterface $event): void
{
$this->cookie = $event->getSubject()->cookie;
}
}
要点
まず、Cake3でのEventオブジェクトがCake4ではEventInterfaceに変わっています。
そして、引数のイベントオブジェクトから、Cake3では_subject
が存在していたのですが、Cake4ではgetSubject()
が用意されていて、そこからセットしてある値を取得できるようになっています。
ちょいちょいこーいう変更点の違いで、テメーってオコされるので、毎回調べるの手間ですけどね。
それはどのツールでもおんなじか
2021/12/12 追記
お兄ちゃんレビューをもらって、新たな発見があったので、記します。
コンポーネントのイベント元は必ずコントローラなので、 object
を返す $event->getSubject()
も必然的にコントローラである。
https://api.cakephp.org/4.0/interface-Cake.Event.EventInterface.html#getSubject()
本来、コンポーネントからコントローラを引っ張るなら、こっちの形の方が素直かも。
https://book.cakephp.org/4/ja/controllers/components.html#id9
Cake4Component
public function startup(EventInterface $event): void
{
$this->cookie = $this->getController()->cookie;
}
という形で取得するのが素直なんだそうです。(奥がふけーな)
学びが深い日々に感謝!!