2011年2月15日火曜日

kohana3.0からkohana3.1にアップデート

いつのまにやら、kohana3.0からkohana3.1にアップデートしていました(汗


UPGRADING FROM V3.0

Kohana 3.0 to 3.1 Upgrade Troubleshooting


内容をチェックしたいところですが、時間が無いのでとりいそぎメモ。
内容をチェックして、なんとなく訳したのでメモ。




3.0.xからの移行点

※適当な抄訳です。意訳、誤訳多いと思いますので正確な情報は原文を確認してください。

Request/Response
リクエストクラスは、リクエストとレスポンスに分かれました。

レスポンスをセットする(コンテンツを返す)場合
3.0.xでは:
$this->request->response = 'foo';
3.1.xでは:
$this->response->body('foo');

HTTP status codeを返す場合
$this->response->status(404);

HTTP headersを返す場合
$this->response->headers('Content-Type', 'text/html') 

リクエストクラスのプロパティのいくつかは、メソッドに変換されました
- Request::$controller -> Request::controller()
- Request::$action -> Request::action()
- Request::$directory -> Request::directory()
- Request::$uri -> Request::uri()

Request::instance() は、Request::current() とRequest::initial()に置き換えられました。
通常は、Request::current() を使用してください。しかし(HMVCを用いてる時などに)最初の呼び出し元を確認する時は、Request::initial()を使用してください。


Validation
バリデートクラスは、コンテキストをサポートするよう改善されており、これに伴い、APIも変更されています。
また、組み込みのバリデーションルールから、コアロジックが分離され、コア部分は、「Validation」クラめルール部分は、「Valid」クラスに分かれました。

Context
バリデートクラスに、コンテキストがサポートされましたので、rule()とcallback()を結びつけることができるようになりました。そしてrule()は簡単に両方を処理することができます。

古い使用方法:
rule('password', 'matches', array('repeat_password'))

新しい使用方法:
rule('password', 'matches', array(':validation', 'password', 'repeat_password'))

3番目の引数は、現在のルールに渡される全てのパラメータが含まれています。
Valid::matches()関数を見てみると:
public static function matches($array, $field, $match)

':validation'は第1引数、'password'は第2引数(チェックするフィールド)、'repeat_password'は第3引数(一致させたいフィールド)
':validation'は、実際のバリデートクラスに置き換えるように、バリデーションクラスに伝える特別なコンテキスト変数です。この方法は以前のコールバックの動作と何ら変わらないように見えますが、もっと強力に使えますよ。

コンテキスト変数:
  • :validation - バリデーションオブジェクト
  • :field - フィールドの名前と同等 (rule('username', 'min_length', array(':field', 4)))
  • :value - フィールドの値

ルールには、ブール値を返す関数であれば、なんでも使用することができます。

Filters
フィルターはバリデーションクラスから削除されました。
代わりになるものはなく、もしORMと共に使用していた場合は、ORM側で新しいメカニズムで動作します。


Cookie salts
クッキークラスは、saltが何も設定されていなければ例外をスローし、デフォルトは何も設定されなくなりました。
ですからしてbootstrapにsaltの設定が必要になります。

Cookie::$salt = 'foobar';

または、各々のアプリケーションでクッキークラスを拡張し定義します。

class Cookie extends Kohana_Cookie
{
    public static $salt = 'foobar';
}


Controller constructor
もし何らかの理由で、コントローラーのコンストラクタをオーバーロードする場合は、以下のように記述してください。

public function __construct(Request $request, Response $response)


index.php / bootstrap.php
変更点主な変更は、リクエストの実行が、bootstrap.phpからindex.phpに移動したことです。
これにより、テストを行う場合でもbootstrapは1つで済みます。
そして、bootstrapは只のセットアップ環境設定ファイルとなり、実行するものではなくなりました。


404 Handling
Kohanaは、404等のHTTPステータスコードの例外処理が組み込まれました。もしReflectionExceptionを使用した404リダイレクトを使用している場合は、HTTP_Exception_404を使用するようにしてください。より詳しい情報は、error handlingを参照してください。


Form Class
Form::open()を使用した場合のデフォルト動作が変更されました。
パラメーターが空の場合のaction属性は、以前は"現在のURI"でしたが、"/"(ホームページ)になります。