CakePHP: Jquery.uploadのシンプルな利用


CakePHPフレームワークを使っています。editビューの中で、ごく簡単にajaxでファイルアップロードしたかったので、シンプルで手軽な Jquery.upload.jsを使って組み込んでみました。コードの中に少しJavaScriptも書き足さなくてはいけないので、あまりかっこよくはないのですが、CakePHP Media Pluginのように専用のテーブルを作るほどには大げさでなく、「CakePHP jQuery を使用した Ajax ファイルアップロード」はsubmitしてしまって少し困るということで、書いたものです。参考になれば幸いです。
続きを読む

CakePHP: 登録競合の回避方法は?


commitやrollbackをする仕組みはとりあえず実現できる。

JiroBlog » cakePHP覚書#2

CakePHP 1.3でのトランザクション処理の方法と注意点 – (DxD)∞
↑全てのモデルでやる必要はないらしい

でも変更の検知は別途やるべきなのか?

とりあえずお手軽にやるには、単純に更新時間などで調べる方法がいい。↓
“同時実行時の競合 回避方法について” フォーラム – CakePHP Users in Japan
当面はこの方法でいこうか。

 

CakePHP: 一覧のフィルタリングはモデルでやるべきなのか?


一覧をある条件でフィルタリングした上で、ページングをしたときにその条件を維持するということや、例えば「一覧」から「編集ページ」へ移動して、再度「一覧」に帰ってきたときにフィルタリングした状態を記憶しておくにはどうするのだろうか。

条件をGETで渡している人もいるようだ。「編集ページ」へ移動したときもいちいち渡すのだろうか?実際そうすることを提案しているQ&Aもあった。
“検索結果一覧でページングに対する条件保持について” フォーラム – CakePHP Users in Japan

コントロールを簡単に記述したいなら、モデルにその条件を記憶させて任せてしまうというのがお手軽でよい。実際、CakePHP 1.3からモデルにBehaviorが導入されたのだから、フィルタリングはモデルでやるのが正しいのかもしれない。ちなみに以下のようなコンポーネントもあるようだ。これでモデルでのフィルタリングができるみたいである。
CakeDC/search – GitHub

もっと簡単と思えるものとして以下があるようだが、こちらは設定した条件の読み出しができないのかも知れない。もしそうであればフィルタの状態を一覧上のフォームに再反映して表示するために条件を別途に記憶しておかなければならないことになる。
tkyk/cakephp-search-pagination – GitHub
その作者らしき人のブログ→ へびにっき

モデルでやることのもう一つのメリットは、例えば「編集ページ」上で「前レコードへ」「次レコードへ」のような移動ボタンを作りやすいことだ。ファイルメーカーやBentoを使っている人にはなじみのボタンだし欲しい気もする。

また、一方でポリシーとしてこういった処理はコントロールで行うべきだという気もする。上記のGET渡しのQ&Aでセッション変数を使う方法も書いているが、むしろその方がコントロールの書き方としてはすっきりするような気がする。しかし、そういう例をあまりWEB上で見つけることはできなかった。セッション変数を使うことはセキュリティとかリソース消費上よくないと言うことなのだろうか?

僕にはセッション変数を使うのが複雑にならなくてよいように思えるのだが、やはりまずいのだろうか。