2022/04/27
WEBサイトの構築ではお問い合わせフォームや検索、管理画面など様々なところでリクエスト処理が使われます。
リクエスト処理の流れとしては、HTMLのFormタグで入力画面を作成し、入力されたデータはコントローラで処理します。
このときの値の受け渡し方法についてなんですが、Laravelでは主にやり方が3つあります。
以前は Input ファサードが使われていました。Laravel5 からは代わりにRequestファサードになりました。
今回はこのリクエスト処理についてまとめてみました。
1.Request クラスを DI して利用(主流)
リクエスト処理に関しては通常こちらの使い方が多いです。
ファサードと同様、Request クラスのメソッドを利用すると、HTTP メソッド(GET メソッド、POST メソッドなど)を区別なくリクエストデータを操作できます。
個人的にはメソッドの引数にインジェクト(注入)したいオブジェクトを書くことをイメージしています。
:
// DIの際は実態ファイルを use しておく
use Illuminate\Http\Request;
:
class ContactController extends Controller{
public function postIndex(Request $req){
// nameを取得
$name = $req->name; // 主流
$name = $req['name']; // 上と同じ意味
$name = $req->input('name'); // 上と同じ意味
// 全データ取得
// $all はリクエストを配列で受け取る
$all = $req->all();
// 取り出し方
$name = $all['name'];
// 入力値の存在チェック
if ($req->has('name')) {
// 値が存在し、かつ空文字ではない場合にtrue。空文字の場合falseになるので注意。
}
if ($req->exists('name')) {
// 存在すればtrue。
}
// 認証済みユーザーのインスタンスを取得
$user = $req->user();
:
2.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')) {
// nameの値があるとき
$name = Request::input('name');
} else {
$name = '名無し';
}
:
コントローラの名前空間でファサードクラスを使うには、グローバルクラスとして指定する必要があります。クラス名の前に \ (バックスラッシュ)が必要になります。
例)$inputs = \Request::all();
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){
リクエスト処理に関してのまとめは以上になります。
PHPフレームワーク Laravel入門 第2版
僕がはじめてLaravelを学習するために参考にしたサイトは、掌田津耶乃(しょうだつやの)さんの libro というサイトです。当時(2016年)、Laravel学習サイトの中でもこのサイトは群を抜いてわかりやすく説明されていたので、とても勉強になったのを覚えています。この本は掌田津耶乃さんが書いた本なので、わかりやすく解説されているだろうと kindle で購入しました。2020年8月の時点でいうと日本国内にて唯一の Laravel の良書と言っても良いかと思います。口コミでもLaravel本のロングセラー定番解説書として認知されています。当サイトではチュートリアル形式でLaravelを解説しているので、初心者の方はこの本とセットで学習されるといいと思います。しかし、かなりわかりやすく解説されているとはいえ、PHP中級者以上のスキルは必要です。PHP自体の知識が乏しい方は 独習PHP 第3版 をあわせて購入することをお勧めします。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。