Cakephp WEB開発

[Cakephp]クッキーの読み出し方法バージョン3と4の違い

※本サイトはPR表記を含みます。

 

各フレームワークのバージョン違いで、サーバーリクエスト/レスポンスなどの情報の取得の違いが出てきますね。

今回、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;
}

という形で取得するのが素直なんだそうです。(奥がふけーな)

学びが深い日々に感謝!!

-Cakephp, WEB開発
-