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のプロジェクトをインポートする手順