Laravel学習帳

Laravel5.2の学習帳です。開発環境はXAMPP for Windows 5.6.19 / 本番環境はさくらサーバー(スタンダード)

基礎知識

バリデーションについて

2017/12/04

バリデーションとは入力チェックのことです。

Laravel ではバリデーションの仕組みが用意されており簡単にバリデーションをかけることができます。

今回はバリデーションについてエントリーします。

 

使い方

フォームのキーに対してバリデーションルールを設定します。

1)バリデーションのルールを設定

'入力フォームのキー' => 'バリデーションルール'

2)validateメソッドの設定

$this->validate('入力データ' , 'バリデーションルールの配列' , 'エラーメッセージ' );

ここでエラーがあると、自動的に前の画面にリダイレクトします。

実際の記述は以下のようになります。

  public function store(Request $request) {
  $rules = [
  'title' => 'required|min:3',
  'body' => 'required',
  'published_at' => 'required|date',
  ];
  $this->validate($request, $rules);

バリデーションのルールはたくさん用意されています。

よく使われるバリデーションのルールは以下になります。

ルール

説明
required 入力必須
integer 整数かどうか
numeric 数値かどうか
email メールアドレスの形式であるかどうか
digits(digits:2) 数値であり、値の桁数であるかどうか(例では2桁)
min(min:1) 指定された値以上かどうか。(例では1以上)
max(max:1) 指定された値以下かどうか。(例では1以下)

ルールは複数設定することができます。

その場合はパイプ( | )で繋げます。

 

チュートリアル

簡単な入力フォームを作り、バリデーションをかける。

バリデーションを通過すれば確認画面へ推移する。

デモはこちら

 

手順

1)Viewの作成
 1.入力画面
 2.確認画面

2)コントローラの作成

3)ルーティングの設定

 

1)Viewの作成

1.入力画面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="ja" lang="ja">
<head>
  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
  <title>フォームのサンプル(入力画面)</title>
  <style>
  dl { width:430px; }
  dt { float:left; }
  dd { margin-left:130px; }
  .error{ color: tomato; }
  </style>
</head>
<body>
<h1>フォームサンプル(入力画面)</h1>
<p>アンケートにご協力下さい</p>

<form action="{{ route('validation.confirm') }}" method="post">
  <dl>
  <dt>名前:</dt>
  <dd>
  <input type="text" name="username" />
  @if($errors->has('username'))<br><span class="error">{{ $errors->first('username') }}</span> @endif
  </dd>
  </dl>

  <dl>
  <dt>Email:</dt>
  <dd>
  <input type="text" name="mail" />
  @if($errors->has('mail'))<br><span class="error">{{ $errors->first('mail') }}</span> @endif
  </dd>
  </dl>

  <dl>
  <dt>年齢:</dt>
  <dd>
  <input type="text" name="age" />歳
  @if($errors->has('age'))<br><span class="error">{{ $errors->first('age') }}</span> @endif
  </dd>
  </dl>

  <dl>
  <dt>ご意見ご感想:</dt>
  <dd>
  <textarea name="opinion" rows="8" cols="40"></textarea>
  @if($errors->has('opinion'))<br><span class="error">{{ $errors->first('opinion') }}</span> @endif
  </dd>

  <div><input type="submit" name="button1" value="送信" /></div>
  <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

</body>
</html>

 

2.確認画面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="ja" lang="ja">

<head>
  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
  <title>フォームのサンプル(確認画面)</title>
  <style>
  dl { width:430px; }
  dt { float:left; }
  dd { margin-left:130px; }
  .error{ color: tomato; }
  </style>
</head>
<body>
<h1>フォームサンプル(確認画面)</h1>
<p>アンケートにご協力下さい</p>

<dl>
  <dt>名前:</dt>
  <dd>{{$username}}</dd>
</dl>

<dl>
  <dt>Email:</dt>
  <dd>{{$mail}}</dd>
</dl>

<dl>
  <dt>年齢:</dt>
  <dd>{{$age}}歳</dd>
</dl>

<dl>
  <dt>ご意見ご感想:</dt>
  <dd>{{$opinion}}</dd>
</dl>

</body>
</html>

 

2)コントローラの作成

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

php artisan make:controller ValiDemoController

スケルトンを以下のようにコーディングします。

上記のソースコードを少し細かく解説します。

表示画面を作成

:
  public function getIndex()
  {
  return view('validation.index');
  }
:

バリデーションのルールを作成

:
  $validateRules = [
  'username'=>'required',
  'mail'=>'required|email',
  'age'=>'required|numeric',
  'opinion'=>'required|max:500'
  ];
:

バリデーションのエラーメッセージを作成

:
 $validateMessages = [
  "required" => "必須項目です。",
  "email" => "メールアドレスの形式で入力してください。",
  "numeric" => "数値で入力してください。",
  "opinion.max" => "500文字以内で入力してください。"
 ];
:

validateメソッドの設定 → Viewの表示

:

  //バリデーションをインスタンス化
  $this->validate($request, $validateRules, $validateMessages);

  $data = $request->all();

  return view('validation.confirm')->with($data);
:

 
これでコントローラの記述は終わりです。

 

3)ルーティングの設定

# 入力画面
Route::get('validation/', [
  'uses' => 'ValiDemoController@getIndex',
  'as' => 'validation.index'
]);

# 確認画面
Route::post('validation/confirm', [
  'uses' => 'ValiDemoController@confirm',
  'as' => 'validation.confirm'
]);

 

4)動作確認

http://{ホスト}/validation/ にアクセスしてバリデーションがかかっているかチェック。

以上です。

 

-基礎知識