Kohana V3.3リリース  アップグレードに四苦八苦

KohanaのVer3.3が10月中旬(多分23日頃)リリースされました。
Ver3.2.2で作っていた PETiTPOWER BOOKS を早速アップグレード、うまくいったと思い込んでいたんですが、どうやらミスっていたようです。

結局、11月9日の夜にどうやら 失敗 していることに気づき、11月10日になんとか 改修 出来ました。
ということで、その 健忘録次回 の為に メモ っておくことにします。
そもそも本家のドキュメント UPGRADING FROM V3.2 をよく読めば分かったかも知れませんが、英語が得意でないのがここで露呈したようです。

1.PSR-0の罠

第一の理由というか、これがそもそもの根本原因でした。
旧Ver3.2まではディレクトリは大抵が小文字、もちろんファイル名を小文字でした。
一方、Ver3.3ではPSR-0を正式サポートとなりました。
オートローディングでクラスを読み込む際には、クラス名に準じたフォルダ名、ファイル名の構成でないと正しく読み込めません。
ドキュメントにも書いてある通りにcase sensitiveになっちゃったわけです、ついでにドキュメントにもしっかり書いてありました。

自宅のMacbookで動かしていた際は、特に問題なく動いてるなぁ って思って結果オーライだと思っていたのですが、
よーく見なおしてみるとディレクトリが2つ Controllercontroller。  はて(?_?) ってことで初めて気づいたわけです。

しかもbootstrap部分は自分で追加してるので書き換えはしておらずという状態。
分かる人にはピンとくると思いますが、そーです 実質アップグレードになっていませんでした。(笑)

ということで、bootstrapはじめ自分で作ったコントローラ、ビュー、モジュール Kohanaで拾ってきたREST Clientのクラスなどを書き換えました。

2.例外処理&エラーハンドリングの変更

これもドキュメントには書いてあるんです。
但し、Macだと動くんだけどここのサーバだとうまく動かないんっす。
結局いまだに原因が不明なんですけど、PHPの環境の違いだろういうことでExceptionのクラスをオーバイライドして対処しちゃいました。
同様の事象に遭遇しちゃった方で、正しい対処方法がお分かりでしたらご連絡ください。

ちなみに以下のソースの56行目の親のコストラクタの呼び出しをヤメることによってエラーとならなくなったのでヨシとしちゃっています。

[ソース:classes/Kohana/Kohana/Exception.php]

	public function __construct($message = "", array $variables = NULL, $code = 0, Exception $previous = NULL)
	{
		// Set the message
		$message = __($message, $variables);

		// Pass the message and integer code to the parent
//		parent::__construct($message, (int) $code, $previous);

		// Save the unmodified code
		// @link http://bugs.php.net/39615
		$this->code = $code;
	}

 

エラーハンドリングというかいわゆるエラーページのカスタマイズも変更になりました。
これも基本的にはbootstrapでerrorsの定義を変更して、自分のアプリディレクトリに404のクラスを
オーバイライドをしちゃえば自分用の404ページが簡単に出来上がります。
ちなみに、PETiTPOWER BOOKSの404エラーページは↓な感じ。

この大きな2点を解消すれば、3.3へのアップグレードは完了です。
PSR-0準拠に書いておけばほぼ問題はなかったんでしょうけど、
自分で作った以外のところも結構準拠してない書き方だったので無理にV3.3にアップしなくても3.2は来年5月までサポートしているようなのでそれまでに書き換えるとか別のFWに変更とか、そのまま3.2.2で全うしてもらうのがよいかも知れません。

趣味的プログラマとしては、できれば追従してこうかなぁと思っているので頑張ってました。
Koahnaは、前のCIよりシンプルで軽いのがよいかも、できればCIにあったRaypdのようなCRUDのUIモジュールなどがあるといいなぁ。
最近、FuelPHPなるFrameWorkが話題になっているようですが、ここのサーバPHP5.2だったりするので手を出せていません。

というよりも軽いけどそこそこのものが揃っているフレームワークの方が好きなので、当面はKohanaかYii Frameworkを使おうかなと
思っています。

プッシュ通知を