CakePHP2009/06/25マッチー
$this->render('/elements/calender'); こういう書き方をすると、elementsの中にあるテンプレートをレンダリングしてくれる。 今日、ポップアップウインドウでカレンダーを表示させる機能を作っていたんですけど、カレンダーのテンプレートはどのページから呼んでも同じだから、こんなようなことができないかなと思って調べてみたら、やっぱりありました。そりゃあるよね。これくらいの機能なら。 別に分かりにくい機能とかではないけれど、これから先もきっとこいつCakePHP2009/06/24マッチー
通常、DBの設計の際には、照合順序をUTF-8にしておけば何の問題もないと思っていたのだが、CPIというレンタルサーバのDBを扱う際、照合順序も全部ちゃんとUTF-8にしているのに、文字化けが直らないという問題が発生した。原因が全く分からずに、かなりの時間、悪戦苦闘した。正確にいうと、悪戦苦闘していたのは僕じゃなくて先輩プログラマーのヅヤさんがですけど。 で、原因を調べているうちに我流天性さんというサイトに行き当たり、その解決法も書いてあったので参考にさせてもらった。 どうやらあそこは、文字CakePHP2009/06/23マッチー
つい先日、フォームヘルパーを使ってチェックボックスを作ったのだけど、どうやらlabelの指定ができないっぽく、書き方としてはこんな感じになってしまった。 <?php echo $form->checkbox('check') ?><label for="Check">チェックボックス</label> なので、ラジオボタンも同じ感じなのかなぁと思っていたら、実はそんなことなかったんですね。 <?php echo $form->CakePHP2009/06/16マッチー
フォームヘルパーのチェックボックスメソッドを使うと、言うまでもなくチェックボックスをページ内に設置することができる。 cakeのヘルパーは何かと便利で、余計なことをしなければ勝手に値を保持してくれたり自動的にhidden要素を作ってくれたりするのだけど、この自動的にhidden要素を作ってくれるおかげで、新規登録のときは問題なくても、編集のときにうまいことアップデートが行われなくてちょっと困った。 SQL文を見ても、編集画面でチェックボックスの欄に何の手も加えないでアップデートを行った場合、CakePHP2009/06/12マッチー
ちょっと前に、renderElementを使うとelementsフォルダに入っているファイルをview内で読み込めるようなことを書いた。それについて一つ知ったことがあったので、メモ。 // index.ctp <?php foreach($data as $val) : ?> <?php echo $this->renderElement('program') ?> <?php endforeach ?> // program.cCakePHP2009/06/05マッチー
CakePHPでプログラムを組んでいるとき、controller内で同じソースを書く場面が何度も出てきていたので、そういうのって共通化して使うことができないのかな~と何度も思ったんですが、やっぱりできるんですね。そりゃできるよね。だってCakePHPだもん。 beforeFilterってのを使うと、それができるらしいです。 function beforeFilter() { 共通で使うソースを書く } function add() { } function edit(CakePHP2009/06/04マッチー
CakePHPの中身を見てみると、viewsフォルダの中にelementsというフォルダがある。 この中に適当なctpファイルなどを作っておくと、renderElementでそのファイルを読み込むことができる。ページ内の共通部分などをここで作っておくと、何度も使いまわせるので効率が良くなる。 ……と、書いてはみたものの、実はまだあまり活用したことがない部分だったりします。これを知ったときは意外と使う機会が多そうだぞとか思ったんですけどねぇ。 昨日も、Ajaxを使ってエレメントの内容を書き換CakePHP2009/06/03マッチー
唐突だけれど、今、UserとCategoryがhasAndBelongsToMany(以下HABTM)で関連づいているとする。 この場合、usersテーブルとcategoriesテーブルの他に、両者を関連づける結合テーブルというのが別に必要になる。この結合テーブルには、インデックスとなるidの他に、user_idとcategory_idのカラムを用意してやる必要がある。 ちなみにCakePHPの命名規約に従うなら、結合テーブルには結合する二つのテーブルの名前(複数形)をアンダーバーでつなげたCakePHP2009/06/02マッチー
$this->User->saveall($this->data, array('validate' => 'first')); アソシエーションで関連づけられていると、上記のようにsaveallを行うと関連づけられているものも一緒にデータの登録が行われる。登録したくないと思っていてもcakeはなかなか気配り上手なやつなので、気を利かせて勝手にバリデーションやらデータの登録やらを行ってしまう。 そういうとき、unbindModelを使うと、一時的にアソシエーシCakePHP2009/05/26マッチー
PHPにcompactという関数がある。 複数の変数から一つの配列を作りたいときに使うものらしい。 例えばCakePHPでビューにデータを送るときなんかに使ったりする。 $data = $this->Model->find('all'); $this->set(compact('data')); この二行目は以下の一行と同義。 $this->set('data', $data); まあ、上記のように変数が一つしかないような場合だったらわざわざ