Archive for April, 2007

対応が必要なモデルの validates

Sunday, April 29th, 2007

CakePHP モデルのvalidates()に注意 | Shin x blog には対応する必要がありそう。

このままだと空っぽのデータをバリデーションにかけると OK になる。

bake.php を拡張した decorate.php を使おうとしてみた

Sunday, April 29th, 2007

使おうと思って、decorate.php を実行すると以下のメッセージ

Your database configuration was not found. Take a moment to create one:
---------------------------------------------------------------
Database Configuration:
---------------------------------------------------------------

What database driver would you like to use? (mysql/mysqli/mssql/sqlite/postgres/odbc)
[mysql] > 

当たり前かもしれないけれど、Oracle には対応していません。今開発しているプロジェクトでは Oracle データベースなのでこのままでは使えない。

TODO oracle に対応する方法を調べる

decorate.php 提供サイト
CakePHP のおいしい食べ方: Scaffolding and Decorating your web app with CakePHP

複数ファイルを一括で文字列置換したい

Saturday, April 28th, 2007

今回行ったのは、Subversion のキーワード置換用の “$Id$” という文字列が入っていないファイルに対して一括で挿入する処理です。
ほんとうは実行結果のログも取得したいところですが、時間がなかったのでログはなしで。

for i in `find -name "*.php"`; do sed -e 's/@version.*$/@version $Id$/' $i > $i.new && mv $i.new $i; done

Oracle の SqlPlus で HELP が使えない

Thursday, April 26th, 2007

SqlPlus で HELP コマンドを実行すると以下のようなエラーが発生しました。

SP2-0171: HELPにアクセスできません。

単純に HELP をインストールしていないだけなのでインストールします。

SQL> connect system/xxxxx
接続されました。
SQL> @/xxx/xxx/xxx/hlpbld.sql;
1に値を入力してください: helpus.sql

system ユーザーで hlpbld.sql を実行します。実行すると入力プロンプトが出るので helpus.sql と入力します。

URI の設計

Thursday, April 26th, 2007

参考サイト
Flickr and Good URI Design (Michael Eakes)
クールなURIは変わらない — Style Guide for Online Hypertext

sqlplus の実行結果を整形したい

Wednesday, April 25th, 2007

普通に sqlplus に接続して、

SQL>select * from sample;

とかを実行すると実行結果がとても見づらい。

SQL>set line 200

と設定すると多少見やすくなる。
でもそれでも見づらい。

CakePHP のエラー処理

Friday, April 20th, 2007

今から考えて作ってみる。
Object::cakeError() はどうだろう?

app/error.phpというファイルにAppError extends ErrorHandlerを作る。
Apperror::foo() jを作る。
app/views/errors/foo.thtml を作る

参考
memo-space :: CakePHP日記:AppErrorで日本語が表示できない

例えば以下のような感じかな、

class AppError extends ErrorHandler{    function errorPatternOne {        // エラー処理    }}

呼び出し方は

$ret = CakeError('errorPatternOne', array(array('message' => 'たいへんエラーが発生')));

$ret の中身は errorPatternOne の返り値が設定される。
エラー処理の際はログも出力したい。
つづきは明日。
つづきはあさって。

oracle で EXPLAIN PLAN を使う

Friday, April 20th, 2007

複雑な仕様の場合、SQL も同じように複雑になってしまうことがよくある。
Java や PHP といった言語なら複雑にならないように部品化したり、コンポーネント化したりするリファクタリングといった手法がある程度確立されてきているが、SQL に関してそういったものはあまり見たことがない。

まぁ、とりあえず複雑になるのは仕方がないとして(そのうち勉強する)、レスポンスや負荷に関しては仕様を満たす範囲で最適化したい。そういった場合に活用するのが 実行計画

実行計画は、1.EXPLAIN PLAN といったコマンドを使って取得する方法と、2.AUTOTRACE を有効にして取得する方法がある。
1.は SQL を実行せずに解析する為、実行計画は取得できるが SQL の統計情報は取得できない。
2.は SQL を実行し解析するので SQL の統計情報も取得できる。

とりあえず1.の方法だけ説明。

EXPLAIN PLAN FOR SELECT * FROM HOGE;
SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY());

上記 2 行で実行計画が取得できる。
実行計画の読み方についてはまたこんど。

参考
EXPLAIN PLAN – Oralce/オラクルをマスターするための基本と仕組み

bindModel と unbindModel について

Wednesday, April 18th, 2007

参考
New feature: bindModel/unbindModel « cakebaker
A couple Cake tricks in Posts@ rd11, supporters of CakePHP and developers of innovative web applications using php, ajax, xhtml, flash

bindModel と unbindModel は、モデルクラスで “hasOne、hasMany、belogsTo、HABTM” で設定されているアソシエーションを動的に変更する為に使用します。
以下の例は Supportrequest モデルを動的にバインド/アンバインドします。

// unbindModel の使い方

$this->User->unbindModel(array('hasMany' => array('Supportrequest')));debug($this->User->findAll());// bindModel の使い方$this->User->bindModel(array('hasMany' => array('Supportrequest' =>                             array('foreignKey' => 'user_id'))));debug($this->User->findAll());

Subversion でキーワード置換を使うには

Tuesday, April 17th, 2007

ファイルをメンテナンスする度にヘッダーコメントを修正するのは非常に手間だし修正忘れもよく起こりいいことがない。

以下の例のようにヘッダーコメントを自動で設定するようにしたい。

@version $Id: xxxxx.php 391 2007-01-01 18:36:59Z xxxxx $

調べてみるとこれはキーワード置換という CVS や SVN のようなバージョン管理ツールが持っている機能を使っているらしい。
以下はキーワード置換を有効にする方法。

Subversion の propset コマンドを使います。

find . -name "*.php" -exec svn propset svn:keywords "Id" {} ;

Id 以外のキーワードも使いたい場合は、ダブルコーテーションでくくって以下のようにします。

find . -name "*.php" -exec svn propset svn:keywords "Id Revision LastChangedBy Date" {} ;

あとは普通にコミットすれば自動で、$Id$ という文字列が展開されます。

あと毎回 propset コマンドで設定するのはめんどくさいので、ファイルを追加する時に自動で propset を設定するようにします。

どこでもいいのでディレクトリを右クリックします。※TortoiseSVN がインストールされているのが前提
で、右クリック->TortoiseSVN->設定->一般->Subversion の編集ファイル->編集 を実行。すると設定ファイルが開かれるので、

[miscellany]
enable-auto-props=yes
[auto-props]
*.php = svn:keywords=Id
*.tpl = svn:keywords=Id
*.thtml = svn:keywords=Id

を追記します。
これで次回から追加するファイルは自動でキーワード置換が有効になります。

参考
Subversion キーワード置換を自動で設定する方法