【Laravel】Requestクラスに手動でパラメータを追加・上書きする
フォームの内容などをリクエストパラメータとして受け取る際に使用するLaravelのRequestクラスがありますよね。
そのとき、フロント側(HTML、Javascript)でフォームとして追加するのではなく、サーバ側(php、ここではコントローラーやリクエストクラス)でパラメータを追加するにはどうすればいいのでしょうか。
HTMLの input type="hidden" では値を検証ツールで変えられるおそれがあるため使いたくありません。。。
そこで、Requestクラスのmergeメソッドを以下のように使用します。
$request->merge(['name' => 'whizz']);
これで新たにパラメータの追加ができます。
もともと’name’というリクエストパラメータが存在する場合は、更新となります。
例
パラメータを追加する前(元々画面から’testParam’というパラメータを渡しています)
1 2 3 4 5 6 |
public function index(TestRequest $request) { $param = $request->all(); dd($param); .... |
ControllerでRequestクラスに追加する場合(’mergeParam’というパラメータを追加)
1 2 3 4 5 6 7 8 |
public function index(TestRequest $request) { $request->merge(['mergeParam' => 'test']); $param = $request->all(); $dd($param); .... |
RequestクラスでRequestクラスに追加する場合(’mergeRequestClass’というパラメータを追加)
1 2 3 4 5 6 7 8 9 |
public function fules() { // リクエストクラスでマージする場合は必ず通るrulesメソッドに記載しています // rulesメソッドでなくても処理が通る場所ならどこでも大丈夫です $this->merge(['mergeRequestClass' => 'whizz']); return [ ]; } |
注意
やりがちなミスとして、
$request->nameや$request->input('name') でパラメータが取得できるため、
$request->name = 'whizz';
や
$request->input('name') = 'whizz';
としてしまいがちですが、追加や上書きはできません。
お役に立てれば幸いです。
ウィズテクノロジーで一緒に働きませんか?
分野を限定せず幅広い事業を展開。新しい技術の導入にも積極的に取り組んでおり、チャレンジや成長する機会が沢山。
あなたの経験・知識を活かしながら一緒にIT業界を盛り上げて行きましょう!
採用情報詳細はコチラ