CakePHP

CakePHP の BelongsToMany でdependent は default が true になっている #CakePHP

アソシエーションの dependant CakePHP のモデルのアソシエーションには dependant というキーが用意されており、 true に設定することで削除のときに関連付けたモデルのレコードもまとめて削除することができる。 book.cakephp.org belongsToMany だけデフ…

Fixture Factories で Faker が日本語にならなかった #CakePHP

問題 CakePHP に Fixture Factories を導入しようとしていた。 Faker が利用できるので、日本語化しようと思ったがどうもうまくいかない。 原因と解決 defaultLocale がハイフン区切りの ja-JP になっていた。 アンダースコア区切りの ja_JP を指定すること…

CakePHP で Table の Validator を差し替える #cakephp

以前 Validation をカスタムしやすくする方法を書いた。 su-kun1899.hatenablog.com Validation は bootstrap.php で差し替えればいいんだけれど、じゃあ自前で呼ばない Table の Validator を差し替えるにはどうしたらいいのか。 Table での Validation Tab…

PHP7 で CakePHP4 の FrozenDate を使うと、月差分が正しく判定されない場合がある #php #cakephp

概要 PHP8.1 未満の環境における CakePHP の FrozenDate は、 UTC でない Timezone を使った場合に、日付差分が正しく取れないケースがある。 FrozenTime を使うようにするか、 PHP8.1 以降にバージョンを上げると解決する。 ※タイトルでは PHP7 としている…

CakePHP の Command のテストで Mock を使うのは、 DI を利用するのがよさそう #cakephp

概要 Mock はできるだけ使いたくない派なんだけれど、外部API利用時なんかはどうしても必要になる時がある。 Controller の場合はやりようがあるが、 Command はちょっと迷った。 CakePHP の Command で使うようなときに Mock をするには DI を使うのがよさ…

CakePHP3 から CakePHP4 に移行したら Middleware が動かなくなった #cakephp

現象 CakePHP3 から CakePHP4 に移行した際に、CakePHP がデフォルトで提供しているミドルウェアを拡張して利用していた Middleware が動かなくなった。(正確には意図しない挙動になった) 原因 CakePHP3 ではミドルウェアは __invoke($request, $response,…

CakePHP でカスタム Validation を追加しやすくする #cakephp

概要 CakePHP には独自に定義したカスタム Validation を使う方法がいくつかある。 Default のバリデーションプロバイダーを差し替えることで、アプリケーション全体で使うようなルールを追加しやすくする。 例えば「会員IDは 0 埋めを含む8桁の数字」のよう…

CakePHP で uploadedFile の Validation をテストする #cakephp #php

概要 CakePHP にはアップロードファイル用の validator が用意されていて便利。 ただテストをするときにちょっとめんどくさい点が2つある。 1つ目はファイルをアップロードするリクエストを作ること。 リクエストするデータとは別に $_FILES にも情報を突…

CakePHP4 と php8 の Docker コンテナを作った #cakephp #php

概要 公式 Docker Image の php:8.0-apache をベースにして、CakePHP のコンテナを作った。 DockerHub & GitHub に置いてある。 hub.docker.com github.com なんで作ったか ここ最近は仕事で触る中心が CakePHP になっているので、手元で色々試せる環境をサ…

認証付きリクエストをテストする #cakephp

環境 CakePHP 4.2.1 cakephp/authentication 2.5.0 認証はセッション方式 概要 認証付きエンドポイントを何もせずにテストすると、(未ログインで)302転送されてしまう。 セッションに偽の認証情報を入れることで、認証を通り抜けてテストできる。 やり方 …

CakePHP3 のテストで Fixture を bake する #cakephp

TL;DR Fixture を bake する際のテンプレ bin/cake bake fixture \ --records \ --schema ${テーブル名} \ --count ${レコード数} \ --conditions "${WHERE句に書くような条件}" --records ( test ではなく) default のデータベースを元にテスト用レコードを…

CakePHP3 で Migration を途中からやる #cakephp

概要 CakePHP3 で DB の構成管理を行っているが、何らかの事情でプレーンな環境で migrate できない場合の現実的な回避策としてのメモ。 プロダクションでは利用されているが、十分に開発環境で運用されていない場合などを想定。 現時点での dump を取得する…

CakePHP3 を CircleCI でテストする #cakephp

概要 CakePHP3 を CircleCI でテストするようにするまとめ。 Database を使ったテストも出来るようにしています。 TL;DR 最終的な yml はこんな感じです。 version: 2 jobs: build: docker: - image: circleci/php:7.1.32-fpm-node-browsers environment: DA…

CakePHP3 でテストの置き場所を変更する #cakephp

概要 CakePHP3 では tests/ 配下にテストコードを書くことになっている。 何らかの原因(察して)でパスを規定から変更したい場合の修正箇所に付いてまとめる。 以降 tests/PHPUnit/ に変更すると仮定して記載する。 paths.php TESTS が定義されているので書…