2008-09-04
cakePHPの路線をあえてはずれる方法を身につけておく
今回は、CakePHP1.2を使います。
cakePHPの路線をあえてはずれる方法を身につけておく
cakePHPは高速開発が出来る代わりに、ある程度制約を持たせています。例えばモデルやコントローラ、Viewの名前など。
最大の恩恵を受けるためにはこのような制約に沿ったりする方が良い訳ですが、基本的には自由な路線でいたい自分としては脱線する方法をあらかじめ知っておきたいと思いました。とりあえず今のところ知りたかったものを下記にまとめます。
モデルの名前を自由に決める
モデルの名前は、DBのテーブル名(複数形)の単数名となります。例えば、テーブル名がpostsであれば、モデル名はpost.phpとなります。
DBのテーブル名も自由に付けたいし、モデル名も自由に付けたいという欲求があるのでこれを回避するには下記のようにします。
DBのテーブル名 hoge、モデル名/app/models/hoge.phpの場合、
モデルファイルには下記のように記載
<?php
class hoge extends AppModel {
var $name = 'hoge'; //クラスと同じ名前をセットする
var $useTable='hoge'; //DBのテーブル名をセットする
}
?>
コントローラファイル/app/contorollers/hoge_controller.phpでは、hogeのモデルを下記のように指定する
<?php
/
class HogeController extends AppController {
var $name = 'Hoge';
var $uses = array('Hoge'); //hogeモデルを指定。最初は大文字
function index() {
$this->flash("hogehoge","/");
}
}
コントローラーの名前を自由に決める
コントローラの名前は、基本的にDBのテーブル名と同じ複数形であるが、上記のhoge_controller.phpのように、
$nameにコントローラ名を入れれば自由に名前がつけられる。
とする。そうするとindex関数が呼び出される。上記では、index関数内で、hogehogeと表示する命令flashが記載されているので、画面上にhogehogeと表示される
ビューの名前を自由に決める
Viewの名前も、DBのテーブル名の単数であり、hoge.ctpのように拡張子にctpを入れる(cake1.2の場合)
コントローラのファイルから、
$this->render('/hoge/hoge.ctp');
を記述すると、
が呼ばれてそのViewを表示する
レイアウトファイルを自由に決める
cakephpでは、/cake/libs/view/layouts/default.ctpが呼ばれ、ヘッダ、フッタなどの共通レイアウトが使われている。
このdefault.ctpを/app/views/layouts/default.ctpにコピーして変更すると、
現在の表示されているCakePHPのヘッダ、フッタを変更できる。
さらにコントローラごとなどでヘッダ、フッタなどのレイアウトファイルを変える際は、
コントローラから
$this->render($layout='hogelayout.ctp', $file='/hoge/hoge.ctp');
を呼び出す。
/app/views/layouts/hogelayout.ctpを設置すればそのファイルがレイアウトファイルとして呼び出される。
アプリ固有の設定情報をまとめる
参考: http://www.1x1.jp/blog/2006/09/cakephp_config.html
アプリ固有の設定ファイルは上記のサイトを参考に。
ルートディレクトリのアクセス時に表示するページを決める
http://hoge.com/へのアクセス時にどのページを出すかを決めるには、
app/config/routes.phpの下記の行を変更する
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
この行を、例えば
Router::connect('/', array('controller' => 'hoge', 'action' => 'index'));
と変更すれば、
http://hoge.com/にアクセスすると、
http://hoge.com/hoge/indexの画面を表示してくれる
SQL文を自分で書いてしまいたい
cakePHPはSQLを書かなくても自動的にSQL文を作成してくれるが、やっぱりSQL自分で書きたいよという欲求もある。下記の方法で対応可能です。
下記は、HogeテーブルにinsertするSQLを直接書いて実行しています。
$data[0] = 'あああいいい';
$data[1] = 'yet';
$this->Hoge->query('insert into hoge (content,status) values(?,?);' , $data);


