CakePHP

CakePHP

CakePHPの技術情報です。
バージョン1.x 2.x系統の情報がメインです。

CakePHP

[CekePHP5]Tableクラスのメソッド存在チェック

こちらの記事でコントローラーのメソッドの存在チェック方法について書きましたが、Tableクラスでメソッドが存在するか調べる方法についてはまた事情が違うようでした。Tableクラスに実装したメソッドに関してはmethod_exists()で可...
CakePHP

[CakePHP5]Modelイベントがなくなってる?

レコードの保存時などのイベント取得でCakePHP4以前ではafterSave()とかbeforeFind()とか、そいういうメソッドをTableクラスに定義するとそこでイベントを受け取ることができました。ですが、CakePHP5でやってみ...
CakePHP

[CakePHP]メール送信で”Could not send email: unknown”

CekePHP5でメール送信したら"Could not send email: unknown"という謎のメッセージが出る。原因EmailTransportのclassNameの設定を確認する。app.php(もしくはapp_local.p...
CakePHP

CakePHPがひどすぎる件

久々にCakePHP触ったんだけど、5になってリファレンスのインチキ度が増していますので、全く信用できません。CakePHP4とかのときに削除された機能がそのまましれっと書いてある。とにかく、名前が変わっただけとか無意味な変更がおおくて非常...
CakePHP

[CakePHP5]CSRF無効化

CakePHP5でCSRFを無効化する方法がハマったのでメモ。結論先に結論だけ述べると、FormProtectionComponentを使えダウトな情報その1SecurityComponent はCakePHP4.2ぐらいのころになくなった...
CakePHP

オブジェクト内のプロパティー存在チェックに引っかからない場合

CakePHP5/PHP8.1でコンポーネントがロードされているかどうか調べるためにif(isset($this->Auth)){}というようなコードを書いたが、なぜかfalseになる。その他のmethod_exists()などの類似の関数...
CakePHP

[CakePHP5]Security.saltが取得できない。

CakePHP5でSecurity.saltを利用したかったのですが、なぜか取得できません。設定してあるのになぜだろう?と、30分ぐらい悩んだのですが原因判明config/bootstrap.php で消してました。Security::se...
CakePHP

CakePHP5でコードをきれいに保つ

コードのスタイルを統一しておくことは、品質の良いコードを保つのに必須要件です。ですが、コーディング規約をいちいち気にしながらコードを書くのは非常にストレスになります。ということで、できるところは機械に任せちゃいましょう。CakePHP5でコ...
CakePHP

[PHP]ゴミがレンダリングされる

CakeなりLaravelなりで、下手にコンソール出力するデバッグプリントを使って消し忘れるとめんどくさいことになります。フレームワークだと、いろんなファイルをを経由して呼ばれるので、消し忘れるとどこでやってるかわからなくなります。フレーム...
CakePHP

[CakePHP]IN句を使う場合はwhere()を使うな!whereInList()を使え

通常、IN句を使って指定のIDのレコード一覧を取ってくるには$this->Users->find('all')->whre();とすればよいのですが、$userListが空の場合エラーになってしまいます。従来は$userListの存在チェッ...
CakePHP

[CakePHP4]ModelをcontainしたらCannot convert value of type array to string になる場合

CakePHP4であるモデルをcontain()で追加したら、下記のエラーになりましたCannot convert value of type array to string原因テーブルに複合PK使っていました。その場合、接続元のテーブルを...
CakePHP

==と===の罠

PHPは変数の型のチェックがいい加減なんで、仕様をよく理解していないと変なところでハマったりします。CakePHPのコントローラー処理で、仮に<?php//コントローラーでpublic function view($user_id = nu...
CakePHP

Windowsホスト&VirtualBoxの共有フォルダー内でcomposerやnpmが動かない

いろいろ試して、WindowsホストでVirtualBoxの共有フォルダー機能は使ってはいけないという結論になりました。なぜダメなのかと解決方法(代替案)を記事にしました。composerやnpmが動かないWindows環境でVirtual...
CakePHP

[2021年]プログラミング初学者にお勧めな言語・フレームワーク

現在はフレームワークなしでWebアプリケーションを組むことは必須になっています。どのフレームワークを使うべきかの参考の一つとして記事を書いてみました。PHPのフレームワーク多すぎ問題RubyはRails一択なのですが、PHPはあまりにも多く...
CakePHP

[cakephp2]Form->submitのタイトルでHTMLを使いたかったができない件

一昔前は、HTMLのボタンなどのパーツを修飾したい場合は画像を使うことが多かったですが、最近の流行りはすべてCSSであらわすのが主流かと思います。ということで、ボタンをCSSで修飾してみたのですが…CakePHP2.10 でのお話。
CakePHP

CakePHP2 Containableビヘイビアでモデルの抑制がリセットされてしまう問題

CakePHP2でどうもパフォーマンスが出ないと思っていろいろ調べていました。findしたデータをダンプしてみたら問題発見、ある一部のモデルでcontainが効かなくなっていて以下のモデルすべてが出力されているのを発見しました。
CakePHP

CakePHP2のコントローラーをUnitテストでしてみたが…

今まで、コントローラーのテストでPHPUnitはあまり使ってこなかったのですが、ちょっと試してみようかといろいろやってみたが…正直使い勝手悪すぎる。
CakePHP

CakePHP2のFixtureを簡単に書く

CakePHPのUnitTestは便利なツールではありますが、いろいろ書かなくてはいけないのでかなり面倒。ということで、テスト用に使っているデータベースを読みこむようにすればいいですが、条件を変えようとするとちょっと面倒です。ということでF...
CakePHP

BlowfishPasswordHasherを使って自前でパスワードチェックをする。

CakePHPで認証処理をする場合は、Authコンポーネントに任せていると思いますが、自前で認証したい場合。こんなふうにやってはダメ!$pw = new BlowfishPasswordHasher();$user = $this->Use...
CakePHP

同じテーブルで条件を変えて同時に取得するには

CakePHP2でHasManyでリレーションしているテーブルの最新のデータのみ取得と全件取得を同時にしたい場合どうしたらいいか…ちょっと悩みました。