はじめに
お仕事で、Zend Frameworkのバージョンアップをしなければならなくなった・・と思ったら、Zend Frameworkはもうなくて、Laminas Projectに移って新たなフレームワークとして公開されている。 しかし、Laminas MVCでは必要な要件を満たさないことが分かってとん挫していた。
そこで、次の候補としてLaravelを挙げて、必要な要件を満たせるかどうかを一歩ずつ調査していく。
要件(10)
10個目の要件は、「__callメソッドを使ったアクションのまとめ上げができること」。
一部のコントローラで__callメソッドを使っているので、念のため、フレームワーク側で変なことをしていないかを確認する。
結論から言うと、__callメソッドにはRequestオブジェクトを渡せないので、別のアプローチになる。
導入
こちらでセットアップした環境を(コピーして)使っていく。
私は以下のようにコピーを作成。
cp -pr laravel-setup-9-request-parameters laravel-setup-10-call-method cd laravel-setup-10-call-method
設定・実装
まず、例示のためのコントローラーを作っていく。
php artisan make:controller '\App\Http\Controllers\CallController'
このapp/Http/Controllers/CallController.phpを以下のように編集する。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class CallController extends Controller { public function login(Request $request, $tenantAlias = null) { return view('call.login', ['action_name' => $tenantAlias]); } }
次に、ビューテンプレートresources/views/call/login.tplを作成する。
Action Name:{$action_name|escape:"html"}
最後に、routes/web.phpに以下の内容を追記する。
Route::get('/call/{tenant_alias}', [\App\Http\Controllers\CallController::class, 'login'])->where('tenant_alias', '[a-zA-Z0-9-]*');
最後の正規表現の部分は、許容するURLの文字列パターンなのでご自由に。
動作確認
以下のURLにアクセスする。
http://<your-ip-address>/laravel-setup-10-call-method/public/call/test-hoge
routes/web.phpの設定にある{tenant_alias}の部分がtest-hogeとマッチするので、期待通りにアクションが呼び出されているため、以下のような画面が表示される。
Action Name:test-hoge
まとめ
- 結果的に、
__callメソッドは使えなかったが、もっと分かりやすくすっきりした形で書ける