【CakePHP】組み込みバリデーションを勝手利用する

cake-logo久しぶりにCakePHP本体のTipsなんかを。

現在ちょっとトリッキー(?)なバリデーションの利用を想定していまして、Model内の$validateプロパティでの指定以外で同機能が使えないものかと調べていました。
組み込みバリデーションは、全て「cake/libs/validation.php内にあるようで、こいつをインポートして直接メソッドを呼び出すだけで何処でも使えるようです。

例えばこんな感じです。

App::import('Core', 'Validation');
class FooController extends AppController {
var $name = 'Foo';

//省略

function hoge(){
//バリデーションの利用
if(Validation::alphaNumeric($check)){
echo "OK牧場";
}

}

なお、場所によってはimport()はいらないかもしれません。

使いどころでは、条件付きでバリデーションを行いたいときですね。
実例を挙げますと、今回管理画面で「新パスワードが入力されたときだけ、新パスワードと確認パスワードをチェックして、問題なければAuthでhashしてsaveする(つまり新パスワードが空の時はパスワード変更処理を除外する)」というのをやっていて、全てをバリデーションルール内で行うのが難しいためです。なので、バリデーションルールから外に出して、関数を直接呼んでチェックしよう、というわけです。

今回は極端な例として、コントローラ内で使用していますが、一般的にはモデル内に独自関数を作ってその中でやった方が良いかもですね。

【CakePHP】第4回CakePHP勉強会@Tokyo無事終了!

cake-logo勉強会参加の皆様、本当にお疲れ様でした。
また、当方の「つまらない話」に耳を傾けていただいた皆様、本当にありがとうございました。
そして、懇親会にてお声がけいただいた皆様、そして会場を提供していただいたGREE様、スタッフの皆様、yandodさんをはじめとする発表者の皆様、本当にありがとうございました。

さて、勉強会報告の前にまずは自分の反省会なのですが…
まあ前回カンファレンス東京のLTよりはマシになったかもしれませんが、でもまだ全然でしたね。
内容はだいぶ削ったのですが、やっぱり早口でした(^^;;;
早口ですから皆さんもついて行くのに必死だったのではないでしょうか?
本当にすみません…

また、LTの時はは時間が絶対的に足りなかった(つまり扱うネタを間違えた)という反省点がありました。今回は時間は(個人的には足りないのですが)まあよしとして、別の点で改める必要がありそうです。いまいちターゲットを絞れていなかったというのか、初めて聞く方と、ある程度触っている方のネタを両方とも同じくらい入れてしまったのが反省すべき点…というか難しかったです。あとは話慣れていない点ですね。この辺は経験値だと思いますので、ご迷惑かもしれませんが回数を重ねさせていただいて改善したいと思います。

さて、自分の反省はこのくらいにしておいて、他の皆さんの発表に対しての自分の考え等をつらつらと書いていきたいと思います。

■candycane:yandodさん

私にとっては大注目だったテーマで、これは成功したら大変なことになると前から考えていました。実は、2回目の勉強会で知り合った方々と、「redmine移植したら凄いよね」的なところでやる企画はあったのですが、それが立ち消えしてしまったのです。Pukiwiki機能他オリジナル機能も搭載されるとのことなのでとても良いツールになりそうな予感です。コード公開されたら、是非Ktai LibraryのBTSをこれにさせていただきます(笑)。

■「Ktai Library」で携帯サイトを高速開発:MASA-P

「Ktai Library」スライドダウンロード
「Ktai Library」スライドダウンロード(PDF形式)

内容については、上記スライドの方をご覧ください。

■極めるroutes.php:akiyanさん

素晴らしいドキュメントです。
スライドを公開されるそうなので、routesを詳しく使いたい方には良い教材になると思います。
でも、個人的に言わせてもらうと、まだ極められていない!(笑)
是非Routes::connectNamed()に関する記述を入れて欲しいところです。

クエリパラメータ(「?~」「#~」)に関しては、私もKtai Libraryの開発時に、ソースを追っていって気がつきました。確かにマニュアル等、何処にも記述がないんですよね。

■CakePHP 1.3:cakephperさん

デプロイとJsHelperは大変興味があります!
それからSQL Exprainは「つくかも」とのことですが、便利なので標準になって欲しいですね。
他にどんな機能がついていくんでしょうね。
また、IRCはいつもありがとうございます。私も非力ながらお手伝いできることがあったらさせてください。

■phpUnderControl:miauさん

内容の前に、まず「見せ方」が大変に面白かった!
今までにない発想で楽しかったです。
ただ、時間がない影響でやはり早口で進行してしまっているところがあり、また割と上級向けの内容だったためについて行くのがやっとだった印象です。私の前回のLTを見ているようだったので、自分は人のことが言えないですが、でも是非改善いただければと思います。

で、内容なのですが、これはなかなか面白いツールですね!
グラフでいろんな履歴が丸わかりというのか、プロジェクトの健全性分析に威力を発揮するなと感じました。
また、テスト関連の自動化は素晴らしいというのか、こりゃー楽だみたいな。
自分の会社がもしでかくなったら、こういうツールも是非検討したいと思います。

■ImageGraph:s-yo-koさん

私は、同様のグラフ作成として、Google Chart APIを考えていました。
何故かというと、ImageGraphだとたぶんGDがいると思うのですが、レンタル鯖でGDが入っていない不届きものがいたりするので、こちらの方が一般化しやすいかな、と。
でも、グラフなどによる情報の可視化は私もこれからのテーマになりそうです。

■Behavior:matsuuraさん

Bakeryに、お宝は結構ありそうですね。
ソフトデリートは、今まで律儀に毎度書いていたので、ビヘイビア使用に切り替えても良いかなと思いました。
また、slugも便利そう。
私的にもビヘイビアはあまり触っていない方なので、これからは積極使用したいです。

■プラグイン三段活用:slywalkerさん

エンターテイナーだなぁ(笑)。
うらやましい発表でした。
内容も素晴らしい! マジでKtai Libraryをプラグインで出した方が良さそうな気がしてきました。
問題点は…多少手書きでおのおののカスタマイズが必要になり、簡単インストールで無くなってしまいそうな点ですね。
ここを解決できれば、とてもウマーになりそうです。

■10分でできるApp::import:shinさん

この話については、いろいろと物申すところがあります(笑)。
いろいろ使っていくとですね、やはりApp::import()はキャッシュが効いていたとしても重い!
こちらの記事で書きましたが、tree()を軽くしないと、やはりApp::import()はまだまだ小悪魔です。
せめて、Coreを更にいくつか分けてサーチの最適化をして欲しいところ。
ちなみにKtai Libraryでは、ライブラリ本体は独自の方式でスタティックで実体のインスタンスを管理し、コンポーネントなどではその参照を受け取るようにすることでムダを省いています(まあこれはこれで欠点もあるでしょうけど)。

あと、某関西自虐ネタな写真は最高でした!
あり得ないですw

~・~・~・~・~・~・~・~・~・~・~

いろいろ書いてしまいましたが、どれも大変に有用でためになるものばかりでした。
そして、懇親会も含め、大変に楽しいイベントだったと思います(まあ毎度ですが)。
今回も出て良かったです。
また是非参加したいと思います。

【追記】
スライドは別途公開予定です。
準備中なのでもうしばらくお待ちください

公開しました