Laravelでフォームで送信した値を取得する

Laravelでフォームで送信した値を取得する方法をいくつか試してみます。

Request::input()

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

routes.php

Route::controller('/contact', 'ContactController');

ContactController.php

ページアクセス時はindexを、フォーム送信時はconfirmを表示するようにします。

<?php

namespace App\Http\Controllers;

use Request;

class ContactController extends Controller
{
	public function getIndex()
	{
		return view('contact.index');
	}

	public function postIndex()
	{
		// nameの値があるとき
		if (Request::has('name')) {
			$name = Request::input('name');
		} else {
			$name = '名無し';
		}
		$age = Request::input('age');
		$gender = Request::input('gender');
		$favorite = Request::input('favorite');
		$body = Request::input('body');
		// job自体がないときは第2引数が返される
		$job = Request::input('job', '学生');
		return view('contact.confirm', compact('name', 'age', 'gender', 'favorite', 'body', 'job'));
	}
}

値があるかどうかを調べる場合はRequest::has()を使用します。
Request::input()に第2引数を指定すると、第1引数に指定したnameがない場合にその値を返します。

contact\index.blade.php

ページアクセス時に表示するビューです。

<form method="POST" action="/contact">
	<dl>
		<dt>名前</dt>
		<dd><input type="text" name="name"></dd>
	</dl>
	<dl>
		<dt>年齢</dt>
		<dd>
			<select name="age">
				<option value="">-----</option>
				<option value="15才">15才</option>
				<option value="16才">16才</option>
				<option value="17才">17才</option>
				<option value="18才">18才</option>
			</select>
		</dd>
	</dl>
	<dl>
		<dt>性別</dt>
		<dd>
			<input type="radio" name="gender" value="男性">男性
			<input type="radio" name="gender" value="女性">女性
		</dd>
	</dl>
	<dl>
		<dt>好み</dt>
		<dd>
			<input type="checkbox" name="favorite[]" value="食べること">食べること
			<input type="checkbox" name="favorite[]" value="猫">猫
			<input type="checkbox" name="favorite[]" value="マヨネーズ">マヨネーズ
		</dd>
	</dl>
	<dl>
		<dt>内容</dt>
		<dd><textarea name="body"></textarea></dd>
	</dl>
    <input type="submit" value="送信">
    <input type="hidden"  name="_token" value="{{ csrf_token() }}">
</form>

以下のようなフォームになります。

to-get-the-value-that-was-sent-in-the-form-in-laravel01

contact\confirm.blade.php

フォーム送信後に表示するビューです。

<dl>
	<dt>名前</dt>
	<dd>{{$name}}</dd>
</dl>
<dl>
	<dt>年齢</dt>
	<dd>{{$age}}</dd>
</dl>
<dl>
	<dt>性別</dt>
	<dd>{{$gender}}</dd>
</dl>
<dl>
	<dt>好み</dt>
	<dd>
@for ($i = 0; $i < count($favorite); $i++)
	{{$favorite[$i]}}
@endfor
	</dd>
</dl>
<dl>
	<dt>職業</dt>
	<dd>{{$job}}</dd>
</dl>
<dl>
	<dt>内容</dt>
	<dd>{{$body}}</dd>
</dl>

$favoriteだけcheckboxで値が配列になっているので、for文で回します。
送信テストすると以下のように取得ができました。

to-get-the-value-that-was-sent-in-the-form-in-laravel02

 

Request::all()

Request::all()はPOSTした内容をすべて取得できます。

ContactController.php

コントローラーを以下のように書き換えます。
フォーム送信時にallを表示するように変更しました。

<?php

namespace App\Http\Controllers;

use Request;

class ContactController extends Controller
{
	public function getIndex()
	{
		return view('contact.index');
	}

	public function postIndex()
	{
		$all = Request::all();
		return view('contact.all', compact('all'));
	}
}

all.blade.php

フォーム送信後に表示するビューです。
配列で返ってくるのでvar_dump()で表示するようにしています。

var_dump($all);

以下のような値が表示されました。

array(6) { ["name"]=> string(13) "西川 葉子" ["age"]=> string(5) "16才" ["gender"]=> string(6) "女性" ["favorite"]=> array(1) { [0]=> string(15) "マヨネーズ" } ["body"]=> string(21) "パンの耳ですわ" ["_token"]=> string(40) "xo9RN8yG4V1wtxce8g7FClDAszrYH8uQm05zAKwh" }

 

Request::only()

Request::only()はPOSTした内容の一部を取得したいときに使用します。

PHP

コントローラーを以下のように書き換えます。
今回はname,age,bodyを取得するようにしました。

<?php

namespace App\Http\Controllers;

use Request;

class ContactController extends Controller
{
	public function getIndex()
	{
		return view('contact.index');
	}

	public function postIndex()
	{
		$only = Request::only('name', 'age', 'body');
		return view('contact.only', compact('only'));
	}
}

フォーム送信時にonlyを表示するように変更しています。

contact\only.blade.php

配列で返ってくるのでforeachで回しています。

@foreach ($only as $key => $value)
    <div>{{$key}}; {{$value}}</div>
@endforeach

以下のように表示されました。

to-get-the-value-that-was-sent-in-the-form-in-laravel03

 

【参考サイト】

 

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2024年4月
 123456
78910111213
14151617181920
21222324252627
282930