laravel謹製のマイクロフレームワーク lumen
が出たので使ってみた。
ざっくり触りながらのまとめになりますが、ツッコミポイントとかアレば是非コメントお願いしまっす。
インストール
laravelとは別のインストーラなので新規にComposer経由でグローバルインストール。
$ composer global require "laravel/lumen-installer=~1.0"
$ lumen new service
$ cd service
$ php artisan serve
http://localhost:8000
でキレイに繋がります。
設定とか
Dotenv
形式の設定がベースになっているっぽいけど、
bootstrap/app.php
を見ると、Dotenv::load
はデフォルトでコメントアウトされている。
基本の設定をコピーしてからアンコメントすると、キレイに読み込まれる。
ベースはproductionモードでエラー詳細とか見れないので、困ったときはこれで。
別ファイルからの設定とかも読み込めるみたいだけど後で。
概要
基本はbootstrap/app.php
が兎に角がんばるみたいな形式っぽい。
.env
の設定ファイルとbootstrap/app.php
だけでアプリケーションを組み立てて行く。
index.php
はというと、bootstrap/app.php
からオブジェクトを受け取ってrun()
するだけ。すっごくシンプル。
bootstrap/app.php
1 Composer/Dotenvの読み込み
require_once __DIR__.'/../vendor/autoload.php';
//Dotenv::load(__DIR__.'/../');
アプリケーションごとComposerに突っ込む時はComposerの読み込みは不要。Dotenvはデフォルトでコメントアウトされてるので必要がアレば外す。
2 Applicationオブジェクトの作成
$app = new Laravel\Lumen\Application;
// $app->withFacades();
// $app->withEloquent();
ファザードとかEloquentとか使いたい人はコメント外せばイイ。
3 implement実装の登録
例外ハンドラとタスクカーネルは必須っぽい。
スケルトンにあるAppとかを使ってとりあえず実装を登録しておく。
$app->singleton(
'Illuminate\Contracts\Debug\ExceptionHandler',
'App\Exceptions\Handler'
);
$app->singleton(
'Illuminate\Contracts\Console\Kernel',
'App\Console\Kernel'
);
4 ミドルウェアの登録
デフォルトでは全部コメントアウトされてる。middleware
メソドやrouteMiddleware
メソドが使える。
// $app->middleware([
// // 'Illuminate\Cookie\Middleware\EncryptCookies',
// // 'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
// // 'Illuminate\Session\Middleware\StartSession',
// // 'Illuminate\View\Middleware\ShareErrorsFromSession',
// // 'Laravel\Lumen\Http\Middleware\VerifyCsrfToken',
// ]);
// $app->routeMiddleware([
// ]);
5 サービス・プロバイダの登録
こちらもコメントアウトされてる。デフォルト登録のコンテナはここになくて、後述のavailableBindings
に処理が記述されてる。lumenならではのコンテナ取り出しバインディングを使いたい場合は後述のavailableBindings
を使えばイイ。
// $app->register('App\Providers\AppServiceProvider');
6 ルートの読み込み
ルートファイルの読み込み。ファイルベースが嫌ならコメントアウトして、サービス・プロバイダとかに突っ込めばいいと思うよ。
require __DIR__.'/../app/Http/routes.php';
7 お返し
ファイルベースで処理するのが嫌なら1-6までまとめて$app
オブジェクトをreturnするクラスを作ればいいです(そのほうが可搬性も良さそう)。
return $app;
設定周り
Application クラスのプロパティで色々制御できる。
protected $basePath
ベースパス。色々なパスの計算の起点になる。
base_path()
関数で値が取れます。
protected $storagePath
storage ディレクトリの置き場所
ログとかがここに入る。
storage_path()
関数で値が取れます。
protected $configPath
config ディレクトリの置き場所
protected $resourcePath
resource ディレクトリの置き場所
この扱いはホントに微妙で、早い話がlang
でしかここの設定は使われてない。というのもbase_path()
とかstorage_path()
とかその辺の関数は用意されてんのに、resource_path()
は用意されれなくてグローバルに参照出来ない。
lang
はtranslator
サービスの登録フックで使われているのでApplicationクラスからの内部参照で使われてるけどviews
の方はConfigファイルでのパス指定になるのでやむなくbase_path("resource/views")
とかしてる。
translator
使わなければ別にここの値は無視してもいいし、ここの値をどうこうしてもview
サービスのパスは変更できない。
public $availableBindings
デフォルトサービスの登録処理一覧。詳細はこっち
ルーティングは
http://qiita.com/mikakane/items/6cd03f81f718ce0a80c3
に移しました。