PHP
lumen

lumen ガイド 1 Applicationクラスの中身

More than 3 years have passed since last update.

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()は用意されれなくてグローバルに参照出来ない。

langtranslatorサービスの登録フックで使われているのでApplicationクラスからの内部参照で使われてるけどviewsの方はConfigファイルでのパス指定になるのでやむなくbase_path("resource/views")とかしてる。

translator使わなければ別にここの値は無視してもいいし、ここの値をどうこうしてもviewサービスのパスは変更できない。


public $availableBindings

デフォルトサービスの登録処理一覧。詳細はこっち

ルーティングは

http://qiita.com/mikakane/items/6cd03f81f718ce0a80c3

に移しました。