cakeでの気づいたTipsなど。
知っているといろんな部分で開発が楽になります。
作成日と更新日の自動設定
レコードの作成日と更新日ですが、
テーブルの設定を
1 2 |
`created` timestamp NULL DEFAULT NULL, `modified` timestamp NULL DEFAULT NULL, |
としておくとここに関する処理を一切書かなくても保存したときに自動的に日付の入力が入ります。
ただフィールド名、型、初期値すべて上記の通り設定してあげないとダメです。
CakePHP2でデフォルト値が定義されているcreatedに0が設定される
ちなみにtimezoneはディフォルトでは日本時間になっていないので、下記のように設定しましょう。
リンクは一部間違ってます。 'Asis/Tokyo'=>'Asia/Tokyo' です。
CakePHPにおいて、timezone関連でワーニングエラーが発生
scaffold
scaffoldは超簡易的なCRUD画面を作ってくれる機能です。
お客さんに見せる場合はまずいですが、とりあえずデータを見るだけ・・とかには便利そうですね。
モデルもviewも必要なく、下記の1行だけでOKです。
1 2 3 |
class SamplesController extends AppController { var $scaffold; } |
http://cakephp20sysnsa.blogspot.jp/2012/05/scaffolding.html
新規登録と編集画面の作成
今回、気づいたんですが新規登録と編集画面のテンプレートが全く同じでOKです。
下記がサンプルコードです。
コントローラーがAdminでUserの情報を保存しようとしているケースです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
/** * スタッフユーザー追加 */ public function useradd() { // POST の時だけ if ($this->request->is ( 'post' )) { if ($this->User->save ( $this->request->data )) { $this->Session->setFlash ( __ ( 'スタッフの登録が成功しました。' ) ); $this->redirect ( array ( 'action' => 'index' ) ); } else { $this->Session->setFlash ( 'スタッフの登録に失敗しました。' ); } } $this->render ( 'userregist' ); } /** * スタッフユーザーの情報を更新 * * @param unknown $id * @throws NotFoundException */ public function userupdate($id = null) { $this->User->id = $id; if (! $this->User->exists ()) { throw new NotFoundException ( __ ( 'データが存在しません。' ) ); } if ($this->request->is ( 'post' ) || $this->request->is ( 'put' )) { if ($this->User->save ( $this->request->data )) { $this->Session->setFlash ( __ ( 'スタッフの編集が成功しました。' ) ); $this->redirect ( array ( 'action' => 'index' ) ); } else { $this->Session->setFlash ( __ ( 'スタッフの情報を編集することができませんでした。もう一度実行してください。' ) ); } } else { $this->request->data = $this->User->read ( null, $id ); } $this->render ( 'userregist' ); } |
そしてテンプレートは下記ファイル(userregist.ctp)だけでOK!
モデルがコントローラーとは別になるので注意。コントローラ自体はAdminですね。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php echo $this->Form->create('User');?> <fieldset> <legend><?php echo __('新規スタッフ入力画面');?></legend> <?php echo $this->Form->input('username',array('label'=>'ログインID')); echo $this->Form->input('japanese_name',array('label'=>'名前')); echo $this->Form->input('email',array('label'=>'メールアドレス' )); echo $this->Form->input('password',array('label'=>'パスワード')); ?> </fieldset> <input type="submit" value="登録する"> </div> |
自力でこれを作ろうとするとidをhiddenで持たせるとか、valueに値をもたせるとかいろいろやらないといけないから大変なんですよね。
それが一切なく、改めてすげー楽だなと思いました。
htmlヘルパー
リンクのみ
http://book.cakephp.org/2.0/ja/core-libraries/helpers/form.html
日付が絡んだものや、pulldownとかでいろいろ活用しました。
モデルでのfind(list)など
1 2 3 4 5 6 7 8 9 |
public function getRoomList(){ $conditions = array( 'fields' => array( 'id', 'room_name' ) ); return $this->find('list',$conditions); } |
key => valueタイプの配列を作ってくれます。
プルダウンの時とかに便利。