そもそも Limonade って?
phpのマイクロWebアプリケーションフレームワークです。
すごく雑に説明すると、Pythonにおけるbottle.pyぐらいの立ち位置です。
phpのライブラリ管理はcomposerを使おうぜ
の風潮が自分に届くより前から存在し、
なおかつ開発自体はもうされていないみたいで、READMEでも最初の使い方が
<?php
require_once('lib/limonade.php');
// 略
と「napespace?なにそれ?」感のある、枯れきったフレームワークです。
composer経由で?
上記のGitHubリポジトリを見るとわかるのですが、composer.json
が存在します(それも、2012年には)
しかも、ちゃんとPackagistにも登録されています。
つまり、ざっくりとですがcomposerベースのwebアプリにも使えそうです。
やってみる
./composer.json
{
"name": "attakei/limonade-demo",
"type": "project",
"authors": [
{
"name": "attakei",
"email": "attakei@example.com"
}
],
"require": {
"sofadesign/limonade": "dev-master"
}
}
./index.php
<?php
require __DIR__.'/vendor/autoload.php';
dispatch('/', 'hello');
function hello()
{
return 'Hello world!';
}
run();
2ファイル用意して
$ composer install
$ php -S 0.0.0.0:8080
どこかで見たPHPコードですね。
composer install で生成されるClassLoaderなどを眺めてみる
<?php
// autoload_files.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'6766b12fe77434412be24043b58480fd' => $vendorDir . '/sofadesign/limonade/lib/limonade.php',
);
autoload_filesを眺めてみると、こんな感じになっていました。
このファイルのおかげで、オリジナルのドキュメントにあるのとほとんど変わらないコードで
limonade with composerができるようになります。
appendix
index.php以外にdispatchされる関数を定義するには
./index.php
<?php
require __DIR__.'/vendor/autoload.php';
// ここはどうする?
run();
./app/index.php
dispatch('/', 'hello');
function hello()
{
return 'Hello world!';
}
こんなコードに分けたい場合。
./index.php
<?php
require __DIR__.'/vendor/autoload.php';
require_once './app/index.php';
run();
こうするしかなさそう
dispatchする関数がnamespaceに属している場合
./app/index.php
namespace App;
dispatch('/', '\App\hello');
function hello()
{
return 'Hello world!';
}
dispatchに呼び出す関数を指定するときに、namespace
込みのフルネームで指定してあげれば問題なく動きます。
dispatchに呼び出す関数を指定するときに、namespace
込みのフルネームで指定してあげれば問題なく動きます。