またどこかのCTOになった人のブログ

またどこかのCTOになった人が書いてます。最近はCakePHP3とConoHaのネタが多いです。

CakePHP3.5にしてみたら何か変わってた。

しばらく投稿もしていませんでしたが、割と元気です。
孤独エンジニアでもなくなったので楽しくやっています。
最近はPythonやってみたいなーと思いつつ、Cake3を叩いています。

現職でまた新しいプロダクトを作ることになり、composerからサクっとプロダクトを作ってみたら何か色々変わっておりました。
CakePHP3.3から3.4にした時、「$this->request->data」が使えなくなり「$this->request->getData()」を使いやがれと言われて痛い目を見たことを思い出しました。

SALTの設定が変わってた

変わってたのですが、別に今まで通りの使い方で問題ないです。
CakePHP3.5から「.env.default」というものがconfigディレクトリ配下に増えていて、ここをごにょごにょすると環境変数セットできるようです。
が、別に使わなくていいかな!と勝手に判断してしまったので使ってません。

CSRFの設定が変わってた

重要なのはむしろこっちです。
今まではCSRFコンポーネントだったので、AppController.php辺りで読み込んでいましたがCake3.5からミドルウェアになりました。
名前も「CsrfProtectionMiddleware」というベタなものになりました。

で、これをApplication.phpに書いてしまえばOKです。
でも、きっと他の場所にも書けます。

Application.phpを開くと、middlewareのfunctionがありますのでここに書きましょう。
以下のような感じになると思います。

/**
   * Setup the middleware queue your application will use.
   *
   * @param \Cake\Http\MiddlewareQueue $middlewareQueue The middleware queue to setup.
   * @return \Cake\Http\MiddlewareQueue The updated middleware queue.
   */
  public function middleware($middlewareQueue) {
    $middlewareQueue
      // Catch any exceptions in the lower layers,
      // and make an error page/response
      ->add(ErrorHandlerMiddleware::class)

      // Handle plugin/theme assets like CakePHP normally does.
      ->add(AssetMiddleware::class)

      // CSRF設定をここに追加してみる
      ->add(new CsrfProtectionMiddleware())
      
      // Add routing middleware.
      ->add(new RoutingMiddleware($this));

    return $middlewareQueue;
  }


と書けば今まで通りCSRFが適用されています。
適当にフォームヘルパー書いてHTMLソースを見てみるとわかると思います。