HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

Zend FrameworkからLaravelに移行する話(9)

はじめに

お仕事で、Zend Frameworkのバージョンアップをしなければならなくなった・・と思ったら、Zend Frameworkはもうなくて、Laminas Projectに移って新たなフレームワークとして公開されている。 しかし、Laminas MVCでは必要な要件を満たさないことが分かってとん挫していた。

そこで、次の候補としてLaravelを挙げて、必要な要件を満たせるかどうかを一歩ずつ調査していく。

要件(9)

9つ目の要件は、「GETパラメータ、POSTパラメータを取得するラッパーメソッドがあること」。

$_GETや$_POSTなどを直接触りたくないので。

導入

こちらでセットアップした環境を(コピーして)使っていく。

hhelibex.hatenablog.jp

私は以下のようにコピーを作成。

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.tplresources/views/request-parameter/result.tplを作る。

  • resources/views/request-parameter/index.tpl
<form action="request-parameter/result?get_a=b&amp;get_c=d&amp;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ボタンを押す。

laravel-setup-9-request-parameters-1

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

laravel-setup-9-request-parameters-2

まとめ

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