Posted at

composer経由でLimonadeを使ってみる

More than 1 year has passed since last update.


そもそも Limonade って?

https://github.com/sofadesign/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込みのフルネームで指定してあげれば問題なく動きます。