CakePHPは自身のフレームワークを活用したコードをサーバー側で実行するシェル機能があります。ブラウザのHTTPリクエストに頼らず実行でき、バッチ処理などに活用できます。忘れないうちにメモっておこう。
/path/to/app/vendors/shells/batch.php
にファイルを作る。「batch.php」としたが名前は何でも良い。
<?php
class BatchShell extends Shell {
var $uses = array('Model');//モデルを使用する場合指定しておく
function main() {
//ここにコードを書く
}
}
?>
デフォルトでは、main()メソッドが実行されます。
次にシェルスクリプトを用意。
/path/to/sh/batch.sh
#!/bin/sh
/usr/local/bin/php /path/to/cake/console/cake.php batch -app /path/to/app
シェルスクリプトはあらかじめ実行権限を付けておく。
スクリプト中のパスはサーバーに合わせて適時変更します。
あとはLinuxの場合、cronで実行するように設定する。
スクリプト中の以下のコマンドを直接cronで設定しても動くと思う。
/usr/local/bin/php /path/to/cake/console/cake.php batch -app /path/to/app
参考
CakePHP製のPC+携帯混合のWebサイトで、404のエラー画面が、携帯サイトでもPCと同じでかくてたくさんの画像いっぱいのエラー画面になって問題になりました。
原因を調べていたら、携帯版でもエラー画面はPC用レイアウトとして使っていた「default.ctp」を使用してしまうことが判明(携帯版では「mobile.ctp」を使用していた)。
そこで、CakePHPで404のエラー画面を別のレイアウトで表示するように変更してみた。
<?php
class AppError extends ErrorHandler {
function error404($params) {
$this->controller->layout = "simple";
parent::error404($params);
}
}
?>
携帯でもPCでも表示できるような簡単なHTMLでレイアウトファイル「app/views/layouts/simple.ctp」を作成する。これで携帯版でもPCばりの画像が出なくなり、シンプルなエラー画面になりました。
参考
CakePHP 1.2 のCheatSheetを発見。1.1用は見たことありましたが、1.2用は初見のような気がします。
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf

情報元:某有名巨大掲示板より
ついこの間 1.2Rc4リリースのエントリーを書いたと思ったら、すぐにStableがリリースされてました…
はまったのでメモ。
某Webアプリを「スパゲッティPHPスクリプト+SQLite」から「CakePHP+MySQL」の環境に移植作業をしてました。ある情報を一覧表示したときの並び順が、移植元のアプリと違うのでorder句にあれこれ試してみてもうまくいきません。
しょうがないのでGoogle先生に聞いてみた。どうやら、DBMSによってNULLの値が上に来たり下に来たりするとのこと。昇順ソートの場合、SQLiteでは下に来て、MySQL上に来るらしい。こいつが原因だ(つーか常識?)。
上記エントリーを参考にしました。いつもありがとうございます。
答えとしてはorder by 句に ‘IS NULL ‘を入れればOK。具体的なSQL例文は以下のとおり
SELECT * FROM truth_girls ORDER BY priority IS NULL;
CakePHP風には
$order = 'Model.priority IS NULL';
$alldata = $this->Model->findAllByFlag('1', null, $order);
こんな感じでしょうか。
いつの間にか、CakePHP 1.2RC4 がリリースされてました。公式サイトからダウンロードできます。早速ダウンロードして、現在進行中の案件にてアップグレード。今のところ目立ったエラーは出てません。正式版はいつリリースされるのやら。
CakePHPの公式ドキュメントサイトであるbook.cakephp.org の日本語ページがところどころ表示されなくてちょっと困り中。ここ2~3日同じ状態で放っておけば直るだろうと思っていたが、改善されない。
FireFoxでアクセスすると、「自動転送がループしています」とのことで、きっと無限にリダイレクトをしているような感じです。SEOでURLに日本語タイトルをぶち込んでるのが悪いような。早くなんとかしてほしいっす。
CakePHP のアソシエーションがよくわからないので、困った。ドキュメント何度も読んでもわからない。
こういった場合は習うより慣れろ。事例を見ながら、「こうかな?」って思ったものを当てはめて、トライ&エラーですね。
以下のエントリーが参考になりました。
特に ECWorks Blogさんの図が大変役に立ちました。
CakePHPでサイト共通の文言やパラメータをどのファイルに記述すべきか?
CakePHPでコードを書いていると、サイト共通や全体で使用する文言やパラメータなどが結構出てきて、コピペで対応してましたが、なんとなく無駄&メンテナンス大変と感じてきました。
CakePHPはまだ初心者なので、どこのファイルに記述すべきか、ちょっと悩んだのでGoogle先生に聞いてみた。
【CakePHP】独自の定数の書き方 | ねねとまつの小部屋
ありました。きちんとまとめられています。素敵です。
ブロガーな皆様には感謝です。困って検索すれば答えがわかる。
いつの間にやらPHPでもアプリケーションフレームワークがそろってきました。
昔はフレームワークと言えばJavaだたんですが、PHPでも充実してきました。
かく言う私もかじり始めています。自分は職業プログラマーではないのですが(なんちゃってプログラマーです。おぶじぇくとしこうって何?って言うレベル)、衰えてきた脳みそに基本から一生懸命たたき込んでいる状況です。
以前とあるプロジェクトでGREE社謹製のEthnaをかじったことあるのですが、そのときはサーバ周り担当だったので環境構築しただけって感じだったので苦労してます。
で、Ethnaでもよかったんですが(GREEのCMおもしろいしね)、数あるPHPフレームワークの中からCakePHPをチョイスしました。
Ethnaにしなかったのは、作成したWebアプリケーションのURLが汚いのが最大の理由ですかね。URLにいろいろなパラメータがついてSEO的に汚いのですよ。CakePHPはデフォルトの設定でSEOに強いきれいなURLになります。
クローズドな業務アプリケーションであれば、どうでもいいんですが、公開するWebサイトならばSEOはとても重要です。まあEthnaでもmod_rewriteで工夫すればきれいなURLになるんでしょうけど。
というわけでCakePHPの公式情報をまとめてみました。
上が1.1用で下が1.2用かな?
以下も押さえておきます
蛇足
バリバリなプログラマーさんに言わせるとCakeは許せない的なところがあるらしいですが、私にはまだわかりません!!