【laravel】コピペでできるフォーム|画面移行|確認

最終更新日

この記事では、コピペでできるフォーム|画面移行|確認についてまとめました。

フォームの基本

表示画面

laravelでフォームを作るソースコードは以下の通りです。コピペでokです。

入力画面

resource>view>form(フォルダー作成)>create.blade.php(ファイル作成)

@extends('layouts.master_test')
@section('title', 'フォームをバリデーションしてDBに追加')
@section('content')
 
<form method="POST" action="{{route('form.confirm')}}">
    @csrf

    <label>メールアドレス</label>
    <input
        name="email"
        value="{{ old('email') }}"
        type="text">
    @if ($errors->has('email'))
        <p class="error-message">{{ $errors->first('email') }}</p>
    @endif

    <label>タイトル</label>
    <input
        name="title"
        value="{{ old('title') }}"
        type="text">
    @if ($errors->has('title'))
        <p class="error-message">{{ $errors->first('title') }}</p>
    @endif


    <label>お問い合わせ内容</label>
    <textarea name="body">{{ old('body') }}</textarea>
    @if ($errors->has('body'))
        <p class="error-message">{{ $errors->first('body') }}</p>
    @endif

    <button type="submit">
        入力内容確認
    </button>
</form>
@endsection

確認画面

resource>view>form(フォルダー作成)>confirm.blade.php(ファイル作成)

@extends('layouts.master_test')
@section('title', 'フォームをバリデーションしてDBに追加')
@section('content')
 
<form method="POST" action="{{ route('form.send') }}">
    @csrf

    <label>メールアドレス</label>
    {{ $inputs['email'] }}
    <input
        name="email"
        value="{{ $inputs['email'] }}"
        type="hidden">

    <label>タイトル</label>
    {{ $inputs['title'] }}
    <input
        name="title"
        value="{{ $inputs['title'] }}"
        type="hidden">


    <label>お問い合わせ内容</label>
    {!! nl2br(e($inputs['body'])) !!}
    <input
        name="body"
        value="{{ $inputs['body'] }}"
        type="hidden">

    <button type="submit" name="action" value="back">
        入力内容修正
    </button>
    <button type="submit" name="action" value="submit">
        送信する
    </button>
</form>
@endsection

コントローラ

app>Http>Controllers>ContactController.php(ファイル作成)

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ContactController extends Controller
{
    public function index()
    {
        //フォーム入力画ページのviewを表示
        return view('form.create');
    }

    public function confirm(Request $request)
    {
         //バリデーションを実行(結果に問題があれば処理を中断してエラーを返す)
        $request->validate([
            'email' => 'required|email',
            'title' => 'required',
            'body'  => 'required',
        ]);
        
        //フォームから受け取ったすべてのinputの値を取得
        $inputs = $request->all();

        //入力内容確認ページのviewに変数を渡して表示
        return view('form.confirm', [
            'inputs' => $inputs,
        ]);
    }

route

routes>web.php

/*フォーム*/
//入力ページ
Route::get('/create', 'App\Http\Controllers\ContactController@index')->name('create.index');

//確認ページ
Route::post('/confirm', 'App\Http\Controllers\ContactController@confirm')->name('form.confirm');

fem