CakePHPで現在のクラス名を取得すると単数形になっている、しかしこれを複数形に変換しないとViewでコントローラーを指定できないので

CakePHPを使っていて、View側でメソッド名やコントロール名を取得して処理をしたいという場面が出てきた。取得そのものは$this->actionや$this->nameでそれぞれ取得が可能なのだが、$this->Html->url()で指定するコントローラー名は複数形で指定する必要があるらしく、しかし$this->nameで得られるのは単数形の状態。「複数形は単純に後ろにsをつけましょう」などといった中学英語の初歩では通用するはずもなく、さりとて自分で複数形データーベースを作って変換関数を用意するなんて気が遠い……。いや、そもそもCakePHPではそれを処理しているんだから絶対に関連した関数なりメソッドが提供されているに違いない、と思ってマニュアルを紐解くと、やはりあった。 “CakePHPで現在のクラス名を取得すると単数形になっている、しかしこれを複数形に変換しないとViewでコントローラーを指定できないので” の続きを読む

CakePHP2.4からAuthComponentのパスワードのハッシュ化の扱いが仕様変更され、デフォルトではSimplePasswordHasherというクラスを用いてハッシュ化されるらしいので、従来のハッシュ値と変わってしまってログインできないというハマリどころに数日悩まされた、あとuserModelに騙されて

CakePHP2系はずっと使っていて、Authコンポーネント(AuthComponent)も使って認証画面を実装することも、ままあった。今回またCakePHPを使って認証画面の実装を行おうとしたら、なぜか認証がいくらやってもうまく通らない。パスワードは事前にハッシュ化してテーブルにINSERTしているし、カラム名の指定も間違ってない。不安になりながら過去成功していたソースと見比べてみても、まったく同じように実装している。なのに認証が通らない。アカウントがあることは認識できているのでデータベースの設定などの問題でもテーブル構成の問題でもない。となると一体何なんだろうか……悩みぬいて数日(いや1週間ぐらいか)、ハマッたのである。あとuserModelオプションにはすっかり騙された。 “CakePHP2.4からAuthComponentのパスワードのハッシュ化の扱いが仕様変更され、デフォルトではSimplePasswordHasherというクラスを用いてハッシュ化されるらしいので、従来のハッシュ値と変わってしまってログインできないというハマリどころに数日悩まされた、あとuserModelに騙されて” の続きを読む

CakePHP2でメール送信を手軽に行うための実装CakeEmailを使ってみたら本当に簡単すぎて便利、メールフォームがなくてもメール送信機能だけで

CakePHP2では、電子メールを使うための機能として標準提供されている「CakeEmail」という実装がある。この実装は簡単な設定だけでメール送信が実現できるというものだ。UNIX系OSであればローカルのメール配送システムを使うことも出来るし、SMTPサーバを指定して他のメール配送システムを利用してメールを送信することもできる。app/Config/database.phpのように複数の設定を記述しておき、利用時に選択することもできる。パラメータを使用時に調整することもできる。などなど、いろいろと便利に出来ているのだ。 “CakePHP2でメール送信を手軽に行うための実装CakeEmailを使ってみたら本当に簡単すぎて便利、メールフォームがなくてもメール送信機能だけで” の続きを読む

[自分用メモ] CakePHPでラジオボタンの実装をしようとしてドキュメントを見ながら作業したが非効率なので次回忘れることを危惧して備忘録的に書き残しておく

仕事でCakePHPを使うことがあるが、しばらく使わないでいるといろいろなことを忘れてしまう。Formヘルパーのラジオボタンの実装をする場面に出くわしたのだが、ドキュメントを見ても説明がまばらというか、あっち読みこっち読みとつまみ食いしながら実装していると、時間が無駄に経過してしまう。なので、自分用メモとしてある項目を残すようにときどき記事を書いている。今回はCakePHPでのラジオボタンの実装。 “[自分用メモ] CakePHPでラジオボタンの実装をしようとしてドキュメントを見ながら作業したが非効率なので次回忘れることを危惧して備忘録的に書き残しておく” の続きを読む

[自分用メモ] CakePHPでチェックボックスの取り扱いをときどき忘れてしまうので備忘録として書き残しておく

私はとにかく忘れっぽい。仕事でCakePHPを使うことがあるが、しばらく使わないでいると細かい部分を忘れてしまうことがある。Formヘルパーのチェックボックスなどはそのいい例なのだが、チェックボックスやラジオボタンはマニュアルを見ながらでも勘が戻らないといまいちピンとこない場合も多いので、自分用の即効性ドキュメントとしてこの記事を残しておくつもりである。人様向けに書いているように読めるだろうが「己が昨日書いたコードは他人のもの」というのが長くこの業界で生きてきて自負できる名(迷)言だと思っているので、これはもはや明日以降の自分に向けて書いているのだ。 “[自分用メモ] CakePHPでチェックボックスの取り扱いをときどき忘れてしまうので備忘録として書き残しておく” の続きを読む

CakePHPで私がElementsを多用する理由は、同じ(もしくは同じような)レイアウトが必要になる場面で同じ(ような)コードをいくつも増やしたくないため

CakePHPをそれほど長く使っているわけではないが、使うたびにチョコチョコと使い方が分かってくる。使い始めた当初はエレメント(APP/View/Elements)の使い方もよくわからなかったが、ぼちぼち使い始めて効果を味わいながら、ここ最近になっていろいろと便利な「レイアウトパーツ」としての価値を考え始めた。もっとも、やりすぎるとオーバヘッドになるのでほどほどにしたほうがいいだろうけれど。 “CakePHPで私がElementsを多用する理由は、同じ(もしくは同じような)レイアウトが必要になる場面で同じ(ような)コードをいくつも増やしたくないため” の続きを読む

[自分用メモ] CakePHPのContrllerとViewで、コントローラ名・アクション名を指定したURLをそれぞれ得る方法

CakePHPではViewでコントローラ名とアクション名からURLを取得する方法は一般的だと思われるが、Controllerで同じことをする場合、Viewでの同じ手法は使えない(細工すればできるっぽい感じだが)。しかし別の方法で取得することができる。 “[自分用メモ] CakePHPのContrllerとViewで、コントローラ名・アクション名を指定したURLをそれぞれ得る方法” の続きを読む

[自分用メモ] CakePHPでホストアドレスを確認して挙動を変更したい

CakePHPならずとも、サーバのホストアドレスの取得方法はPHPのグローバル変数を使えば取得することは可能だ。私がやりたかったことは、同じコードを使ってホストアドレス別に表示や動作を切り替えるという方法だ。本来であれば開発コードと製品コードはSubversionやGitなどを使ってそれぞれ分離し、開発コードで問題がないことを確認したら製品コードにブランチするなどし、サーバも別々に設定して(といってもバーチャルホストでいいと思うけれど)、運用中のコードを使って開発するなどということはないようにするのが大前提であろう。しかしそうでなくてもよい場合、同じコードでありながらどのバーチャルホストで動作中であるかを把握し、それぞれで処理を区分したいという実装が必要になる。 “[自分用メモ] CakePHPでホストアドレスを確認して挙動を変更したい” の続きを読む

[自分用メモ] CakePHPのbeforeFilter()内で条件処理後にリダイレクトをさせたい

CakePHPのControllerには、各アクションを実施する前に通過するbeforeFilter()があり、どのアクションが実行される場合でもこれが前もって実行されるため、認証や固定文字列設定などの共通処理で利用したりすることが多い。特にAppControllerクラスのbeforeFilter()は、あらゆるコントローラ内のアクションの実行に先立って実行されるので影響範囲も大きい。 “[自分用メモ] CakePHPのbeforeFilter()内で条件処理後にリダイレクトをさせたい” の続きを読む

CakePHPで発行するSQLクエリーがどのログにも記録にも残らなくてデバッグしずらいのでプラグインに手を入れた

CakePHPを使っていてもっとも不満なのが、エラーメッセージから原因がよみとりにくいこと。まあそれ自体はまだ許せるにしても、問題はエラーの原因となる文字列などの副次情報すらまともに出力してくれないこと。たとえばデータベース関連のエラーなら、どういうクエリーを投げたのか程度の情報はログに出力してもいいはずだが、基本的にCakePHPが吐き出すクエリー文字列はAS修飾子などでゴテゴテにリネームされて長々としているので見づらい、という理由からなのかどうかは知らないけれど、app/tmp/logs/error.logを見ても「…」で下が省略されてしまうというお粗末なログともいえないログしか残っていない。これでみんなよく文句言わないな……。 “CakePHPで発行するSQLクエリーがどのログにも記録にも残らなくてデバッグしずらいのでプラグインに手を入れた” の続きを読む