Blanka を使ってみた
PHP 5.3 がリリースされてそろそろ一年たつし、Symfony2 も ZF2.0 も PHP 5.3 以上なので、そろそろ自宅の環境を PHP 5.3 にせんといかんなーと思ってた。
前から id:anatoo さん作の PHP の次の十年のためのフレームワーク Blanka を試してみたいと思ってたので、重い腰をあげて PHP 5.3 にした*1。
インストールは手動でビルドするのは色々めんどくさいので、MacPorts にした。
Blanka を github から clone して、lib 以下を include_path に追加して、examples/01_helloworld/index.php を実行して、正しく実行できるか確認。
テストも付属しているので、test/testall.php を実行し、全てのテストが通るのを確認。
Blanka のドキュメント ではひとつのファイルにコントローラが書かれているが、gist にコントローラクラスを分離できるコードが書いてある。
gist:408470 · GitHub
これを参考に以下のようにディレクトリ構成を作った。
`-- blanka |-- app | `-- controllers | `-- IndexController.php `-- www `-- index.php
※ モデルとビューは今回はなし
www/index.php がドキュメントルートの想定。
<?php require_once 'Blanka.php'; use blanka\container\ContainerBuilder, blanka\Router, blanka\ClassLoader; set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__DIR__)); ClassLoader::registerAsAutoLoader(); $cb = new ContainerBuilder; $cb->bind('foo')->toValue('bar'); $cb->bind('index.controller')->to('app\controllers\IndexController'); Blanka::app($cb->build())->respond(Router::it() ->{'/'}('@index.controller::index') ->{'/foo'}('@index.controller::foo') );
コントローラはこんな感じ。
app/controllers/IndexController.php
<?php namespace app\controllers; class IndexController { public function index($params) { return $params->provide('foo'); } public function foo($params) { return 'foo'; } }
http://localhost/ にアクセスすると
bar
http://localhost/index.php/foo にアクセスすると
foo
はまった点
モジュールとしてコントローラクラスを分けた際にオートロードされなくて困った。
Blanka のコードを少し読んだだけなので、他の方法があるかも。
<?php $cb->bind('index.controller')->to('app\controllers\IndexController');
特にここの 'app\controllers\IndexController' と書いているのがこれでいいのか良くわからなかった。
ディスパッチのルールが良くわからんかった。
<?php Blanka::app($cb->build())->respond(Router::it() ->{'/'}('@index.controller::index') ->{'/foo'}('@index.controller::foo')
'@index.controller::index' と書いているから上で書かなくてもいけそうな気がするんだけど。
二つ書くのはめんどくさいと感じるけど、なんか意図があるんだろう。
ともかく面白いフレームワークにはかわらない。
php で Flask みたいなマイクロフレームワーク使いたいというのであれば、id:hiro_y さんの Lune という選択肢もあるかも。
GitHub - hiroy/lune: a PHP minimal framework
*1:個人作の Zend Framework のラッパーも概ねテストは通ったのがバージョンアップを決意した一番大きい動機