基礎知識

リクエスト処理(コントローラ)のまとめ

2018/07/13

WEBサイトの構築ではお問い合わせフォームや検索、管理画面など様々なところでリクエスト処理が使われます。

リクエスト処理の流れとしては、HTMLのFormタグで入力画面を作成し、入力されたデータはコントローラで処理します。

このときの値の受け渡し方法についてなんですが、Laravelでは主にやり方が3つあります。

1.Request ファサードを利用
2.Request クラスを DI して利用
3.FormRequest を利用
POINT!

以前は Input ファサードが使われていました。Laravel5 からは代わりにRequestファサードになりました。

今回はこのリクエスト処理についてまとめてみました。

 

1.Request ファサードを利用

Requestファサードを利用する場合です。

送信した値を取得する場合はRequest::input()を使用します。


:
// 利用するには use で Request しておく必要があります。
use Request;
:
class ContactController extends Controller{

public function postIndex(){

// 基本の使い方
$name = Request::input('name');
$email = Request::input('email');

// job自体がないときは第二引数が返される
$job = Request::input('job','学生');

// すべてのリクエストを取得
$all = Request::all();

// 入力値の存在チェック
if ($request->has('name')) {
}

:

use を使わない場合

コントローラの名前空間でファサードクラスを使うには、グローバルクラスとして指定する必要があります。クラス名の前に \ (バックスラッシュ)が必要になります。
例)$inputs = \Request::all();

 

2.Request クラスを DI して利用

リクエスト処理に関してはこちらの使い方が多い感じがします。

DIとは?

個人的にはメソッドの引数にインジェクト(注入)したいオブジェクトを書くことをイメージしています。


:
// DIの際は実態ファイルを use しておく
use Illuminate\Http\Request;
:
class ContactController extends Controller{

public function postIndex(Request $req){

// nameを取得
$name = $req->input('name');
$name = $req->name; //上と同じ意味

// 全データ取得
$all = $req->all();

// 認証済みユーザーのインスタンスを取得
$user = $req->user();
:

 

3.FormRequest を利用

FormRequest については以前このブログでもエントリーしてます。

以下、主な流れです。

 
1.FormRequest クラスの作成

artisanコマンドでスケルトンを作成。


php artisan make:request ContactRequest

コマンドを入力すると app/Http/Requests/ にクラスが作成されます。

 
2.FormRequest クラスの編集


<?php namespace App\Http\Requests;

use App\Http\Requests\Request;

class ContactRequest extends Request {


public function authorize()
{
// authorize() は通常は true とします
// 誰でもOK
return true;
}

public function rules()
{
// rules()にvalidationルールを記述します。
return [
'name'=>'required',
'email'=>'required'
];
}

}

 
3.コントローラにて DI して使う

上記で作成したカスタムクラスを以下のように DI して使います。

コントローラに記述します。


<?php namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class HogeController extends Controller{

// useせずにfull pathで記述しました。
// もちろん use を使って記述してもOK
public function res(\App\Http\Requests\ContactRequest $req){

$name = $req->input('name');
$email = $req->input('email');
:
}

}

DI するクラスを変えることで、バリデーションルールも変えることができます。


// public function res(\App\Http\Requests\ContactRequest $req){
public function res(\App\Http\Requests\InquiryRequest $req){

 
リクエスト処理に関してのまとめは以上になります。

 

-基礎知識