PHP
プロフェッショナルWebプログラミング Laravel作者:久保田賢二朗,荒井和平,大橋佑太エムディエヌコーポレーション(MdN)Amazon 現職だと Web アプリのフレームワークは CakePHP を利用してるんだけど、Laravel もう少し知っておきたいな〜、と思って読んで…
アソシエーションの dependant CakePHP のモデルのアソシエーションには dependant というキーが用意されており、 true に設定することで削除のときに関連付けたモデルのレコードもまとめて削除することができる。 book.cakephp.org belongsToMany だけデフ…
概要 Laravel の Factory で画像のテストデータを作ろうとして $this->faker->image(storage_path('app/public/images')) とかやっても、画像ファイルがうまく生成されず、画像ファイル名も 0 とかで生成されてしまう。 v1.20.0 で非推奨になっており、 Fake…
スナップショットテストをやりたいなと思って spatie/phpunit-snapshot-assertions を導入してみた。 github.com ところが PHPUnit でデータプロバイダをつかったパラメータライズドテストをやっていると、どうもうまくいかない。 原因は、データセット名に…
概要 Laravel のモデルでクエリを組み立てようとすると、 Method 'where' not found と言われてしまう。 このせいで PHPStorm の補完が効かなかったり、警告が出てしまったりする。 first(); // query() をかませると平気なんだけれども、面倒 MyModel::quer…
(2022/03/17 追記) フォーラムで話題になっており、サポートからも連携されたようなので、そのうち直りそう。 travis-ci.community 問題 php7.4 で TravisCI が突然コケるようになってしまった。 php: error while loading shared libraries: libargon2.so.1…
AWS SDK を使って Amazon SNS 使用箇所のテストを書こうとしていたところ、 PHPUnit の Mock を無邪気に使ったら怒られてしまった。 phpunit Trying to configure method "publish" which cannot be configured because it does not exist, has not been spe…
概要 PHP8.1 未満の環境における CakePHP の FrozenDate は、 UTC でない Timezone を使った場合に、日付差分が正しく取れないケースがある。 FrozenTime を使うようにするか、 PHP8.1 以降にバージョンを上げると解決する。 ※タイトルでは PHP7 としている…
メモリが足りなくて死んじゃう ↓みたいなメッセージが出て死んじゃうことがある。 PHP Fatal error: Out of memory (allocated 39845888) (tried to allocate 512000 bytes)... Fatal error : Allowed memory size of 2147483648 bytes exhausted (tried to …
現象 CakePHP3 から CakePHP4 に移行した際に、CakePHP がデフォルトで提供しているミドルウェアを拡張して利用していた Middleware が動かなくなった。(正確には意図しない挙動になった) 原因 CakePHP3 ではミドルウェアは __invoke($request, $response,…
概要 CakePHP にはアップロードファイル用の validator が用意されていて便利。 ただテストをするときにちょっとめんどくさい点が2つある。 1つ目はファイルをアップロードするリクエストを作ること。 リクエストするデータとは別に $_FILES にも情報を突…
概要 公式 Docker Image の php:8.0-apache をベースにして、CakePHP のコンテナを作った。 DockerHub & GitHub に置いてある。 hub.docker.com github.com なんで作ったか ここ最近は仕事で触る中心が CakePHP になっているので、手元で色々試せる環境をサ…
環境 CakePHP 4.2.1 cakephp/authentication 2.5.0 認証はセッション方式 概要 認証付きエンドポイントを何もせずにテストすると、(未ログインで)302転送されてしまう。 セッションに偽の認証情報を入れることで、認証を通り抜けてテストできる。 やり方 …
概要 returnValueMap を使うと引数に応じて戻り値を変更できる 例外を返したいときは returnCallback() を使うと便利 returnValueMap を使う returnValue に [引数, 戻り値] の配列を渡すと、引数に応じた戻り値を返す Mock を作れる。 引数が複数ある場合は…
概要 CakePHP3 を CircleCI でテストするようにするまとめ。 Database を使ったテストも出来るようにしています。 TL;DR 最終的な yml はこんな感じです。 version: 2 jobs: build: docker: - image: circleci/php:7.1.32-fpm-node-browsers environment: DA…
概要 CakePHP3 では tests/ 配下にテストコードを書くことになっている。 何らかの原因(察して)でパスを規定から変更したい場合の修正箇所に付いてまとめる。 以降 tests/PHPUnit/ に変更すると仮定して記載する。 paths.php TESTS が定義されているので書…