Help us understand the problem. What is going on with this article?

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
に移しました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした