Zend FrameworkからLaravelに移行する話(9)
はじめに
お仕事で、Zend Frameworkのバージョンアップをしなければならなくなった・・と思ったら、Zend Frameworkはもうなくて、Laminas Projectに移って新たなフレームワークとして公開されている。 しかし、Laminas MVCでは必要な要件を満たさないことが分かってとん挫していた。
そこで、次の候補としてLaravelを挙げて、必要な要件を満たせるかどうかを一歩ずつ調査していく。
要件(9)
9つ目の要件は、「GETパラメータ、POSTパラメータを取得するラッパーメソッドがあること」。
$_GETや$_POSTなどを直接触りたくないので。
導入
こちらでセットアップした環境を(コピーして)使っていく。
私は以下のようにコピーを作成。
cp -pr laravel-setup-8-user-auth laravel-setup-9-request-parameters cd laravel-setup-9-request-parameters
設定・実装
まず、下準備として、SmartyのテンプレートでCSRFトークンを埋め込むためのプラグインを作成する。
ファイルパスはresources/smarty/plugins/function.csrf.php。
<?php function smarty_function_csrf($params, Smarty_Internal_Template $template) { return '<input type="hidden" name="_token" value="' . csrf_token() . '" />'; }
次に、例示するためのコントローラーを以下のように作る。
php artisan make:controller '\App\Http\Controllers\RequestParameterController'
このapp/Http/Controllers/RequestParameterController.phpを以下のように編集する。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class RequestParameterController extends Controller { public function index() { return view('request-parameter.index'); } public function result(Request $request) { $getParams = $request->query(); $postParams = $request->post(); $files = $request->allFiles(); return view('request-parameter.result', [ 'get_params' => $getParams, 'post_params' => $postParams, 'files' => $files, ]); } }
次にビューの作成。resources/views/request-parameter/index.tplとresources/views/request-parameter/result.tplを作る。
- resources/views/request-parameter/index.tpl
<form action="request-parameter/result?get_a=b&get_c=d&x[]=xx" method="post" enctype="multipart/form-data"> {csrf} <ul> <li><input type="text" name="post_a" value="B" /></li> <li><input type="text" name="post_c" value="D" /></li> <li><input type="text" name="x[]" value="XX" /></li> <li><input type="file" name="img" /></li> <li><input type="submit" value="Submit" /></li> </ul> </form>
- resources/views/request-parameter/result.tpl
<table> <thead> <tr> <th>GET parameters</th> <th>POST parameters</th> <th>FILES</th> </tr> </thead> <tbody> <tr> <td> <pre>{$get_params|@var_dump|escape:"html"}</pre> </td> <td> <pre>{$post_params|@var_dump|escape:"html"}</pre> </td> <td> <pre>{$files|@var_dump|escape:"html"}</pre> </td> </tr> </tbody> </table>
最後に、routes/web.phpに以下の内容を追記する。
Route::get('/request-parameter', [\App\Http\Controllers\RequestParameterController::class, 'index']);
Route::post('/request-parameter/result', [\App\Http\Controllers\RequestParameterController::class, 'result']);
動作確認
以下のURLにアクセスする。
http://<your-ip-address>/laravel-setup-9-request-parameters/public/request-parameter
以下のような画面になるはずなので、何か適当なファイルを選んで、Submitボタンを押す。

以下のような画面が出てくればOK。

まとめ
- 今回、すべてのパラメータを取得するにとどめたが、
query('get_a', 'default_a')、post('post_a', 'default_a')、file('img')などとすれば特定のパラメータの値の取得がZend FrameworkのgetParam()のようにできる $\_REQUESTに対応する値を取得するメソッドとしてはinput()がある