Laravel5.1入門その5
ミドルウェアの使い方のもっと良い方法がちゃんと書いてあった。
HTTP Middleware - Laravel - The PHP Framework For Web Artisans
というかもうRailsぽい。
やりたいのは
ミドルウェア
app/Http/Middleware/ApiMiddleware.php
<?php namespace App\Http\Middleware; use Closure; class ApiMiddleware { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { $now = time(); $response = $next($request); $content = $response->getOriginalContent(); $content['time'] = $now; $response->setContent($content); return $response; } }
ミドルウェアを登録。
app/Http/Kernel.php
<?php namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { /** * The application's global HTTP middleware stack. * * @var array */ protected $middleware = []; /** * The application's route middleware. * * @var array */ protected $routeMiddleware = [ 'api' => \App\Http\Middleware\ApiMiddleware::class, ]; }
登録したミドルウェアを/api以下で動くようにルーティングを定義。
prefixとnamespaceを一緒に指定すると、区切ってる感でる。
app/Http/routes.php
<?php Route::group(['prefix' => 'api', 'namespace' => 'Api', 'middleware' => 'api'], function() { Route::get('', 'HomeController@index'); });
ベースのコントローラは一応作る。
app/Http/Controllers/Api/BaseController.php
<?php namespace App\Http\Controllers\Api; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class BaseController extends Controller { }
本体のコントローラ。
app/Http/Controllers/Api/HomeController.php
<?php namespace App\Http\Controllers\Api; use Illuminate\Http\Request; use App\Http\Requests; class HomeController extends BaseController { /** * Display a listing of the resource. * * @return Response */ public function index() { return ['foo' => 'bar']; } }
結果。
$ /usr/bin/curl -i http://localhost/api HTTP/1.1 200 OK Date: Fri, 19 Jun 2015 15:21:38 GMT Server: Apache/2.4.12 (Ubuntu) Cache-Control: no-cache Content-Length: 31 Content-Type: application/json {"foo":"bar","time":1434727299}
ちゃんとtimeがくっついた。