PHP Laravel フォームの値を別画面に渡すサンプル

Laravelのフォームの値をsubmitで別画面に渡すサンプルです。

確認環境
・Laravel 5.7
・PHP 7.2.8
・XAMPP 7.2.8
・Windows 10

目次

環境

画面に表示するファイルとして以下2つあります。
1.index.blade.php・・・値を送信する側のファイルです。画面でテキストを入力しsubmitを行って値を送信します。
2.testform.blade.php・・・値を受け取る側のファイルです。

画面表示までの流れ

画面表示までの流れは、以下のとおりです。
1.web.phpにアクセス→index.blade.phpをブラウザに返す。
2.index.blade.phpのformのsubmitでweb.phpにアクセス→MainController.phpにアクセス→testform.blade.phpをブラウザに返す。

最初の画面の表示は以下のURLを入力します。
http://localhost/testlaravel1/public/test1

 

web.phpのファイル

web.phpです。(/routes/web.php)

<?php

Route::get('/test1',function () {
    return view('index');
});

Route::post('/testform','MainController@write1');

3-5行目は、ブラウザのURL欄に、http://localhost/testlaravel1/public/test1を入力するとindex.blade.phpを表示します。
7行目は、index.blade.phpでsubmitボタンを押した時に実行されます。MainController.phpのwrite1メソッドが実行されます。

 

値を送信する側のファイル

値を送信する側のファイルです。(/resources/views/index.blade.php)

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>submit</title>
</head>
<body >
<form action="testform" method="post">
        @csrf
        <input type="text" name="textbox1" >
        <input type="text" name="textbox2" >
        <input type="submit" value="送信ボタン" >
</form>
</body>
</html>

8行目のactionのtestformは、web.phpの7行目のtestformに対応しています。
9行目は、CSRF保護で必須です。ないとエラーになります。Laravel 5.7の書き方です。
10,11行目は、テキストボックスです。画面から文字を入力します。
12行目は、送信ボタンです。ボタンを押すとsubmitします。

参考:https://laravel.com/docs/5.7/csrf

画面イメージ

上記コードの画面イメージです。

 

コントローラのファイル

コントローラのファイルです。(/app/Http/Controllers/MainController.php)

<?php

namespace App\Http\Controllers;

//use Illuminate\Http\Request;
use Request;

class MainController extends Controller
{
	public function write1(Request $moji)
	{
	    $data1 = $moji::all();
	    return view('testform',compact('data1'));
	}
}

12行目は、送信された値を変数にセットしています。
13行目は、testform.blade.phpに引数の値を渡して表示します。

5行目は、コメントにし、6行目を追記しています。
5行目だけのときは、以下のエラーが出ます。
Non-static method Illuminate\Http\Request::all() should not be called statically

参考:laravelのRequestのrequest::all();でエラーが出た場合の対処メモ

 

値を受け取る側のファイル

値を受け取る側のファイルです。(/resources/views/testform.php)

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>submit</title>
</head>
<body >

<p>入力した文字は、{{$data1['textbox1']}}</p>
<p>入力した文字は、{{$data1['textbox2']}}</p>

</body>
</html>

9,10行目のdata1は、MainController.phpで定義された変数です。
textbox1とtextbox2は、index.blade.phpのinputタグのnameで指定された値です。
index.blade.phpで入力された値が表示されます。

{{ }}は、自動的にPHPのhtmlspecialchars関数を通し、XSS攻撃を防ぎます。
例:あいう<br>えおと入力してもタグはそのままの形で出力されます。
https://laravel.com/docs/5.7/blade#displaying-data

関連の記事

PHP LaravelのインストールとHello Worldを表示する手順(Windows10)
EclipseにPDTを入れてLaravelのプロジェクトをインポートする手順

△上に戻る