Help us understand the problem. What is going on with this article?

Laravelで条件分岐に応じて異なるページを表示する方法

入力フォームに入れられた数値に応じて次のページに表示される内容が異なるような機能を実装します。

OS:Mac
開発環境:Cloud9
Laravelバージョン:6.19.1

web.php
// 中略

Route::group(['middleware' => ['auth']], function () {
   Route::post('results', 'UsersController@result')->name('results.results');
});

Routeは上のようになります。コントローラーではresultアクションを後ほど使います。
’results.results'はViewファイルのFormで使います。

UsersController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\User; // 追加

class UsersController extends Controller
{
    public function result()
    {
        $mbgl = $_POST['mbgl'];
        $ogtt = $_POST['ogtt'];
        $hba1c = $_POST['hba1c'];

        return view ('results.results', [
            'mbgl' => $mbgl,
            'ogtt' => $ogtt,
            'hba1c' => $hba1c,
            ]);
    }
}

UsersController.phpでは入力された数値を変数にするようにします。

ditermination.blade.php
@extends('layouts.app')

@section('content')
@if(Auth::check())
    <div class="center">
        <div class="row">
            <div class="col-sm-6 offset-sm-3">
                {!! Form::open(['route' => 'results.results', $user->id]) !!}
                <h2>1. 朝の空腹時血糖値(mg/dL)</h2>
                <div class="form-group" name="mbgl">
                    {!! Form::text('mbgl', old('mbgl'), ['class' => 'form-control']) !!}
                </div>
                <h2>2. 75g経口ブドウ糖負荷試験(mg/dL)</h2>
                <div class="form-group" name="ogtt">
                    {!! Form::text('ogtt', old('ogtt'), ['class' => 'form-control']) !!}
                </div>
                <h2>3. HbA1c(%)</h2>
                <div class="form-group" name="hba1c">
                    {!! Form::text('hba1c', old('hba1c'), ['class' => 'form-control']) !!}
                </div>
                <div class="form-group"> 
                    {!! Form::submit('結果', ['class' => 'btn btn-primary btn-block']) !!}
                </div>
                {!! Form::close() !!}
            </div>
        </div>
    </div>
@endif
@endsection

入力フォームのページはこのような感じになります。$user->idについては画像にはないですがmigrationファイルで書いておかなければなりません。layouts.appでも同様に画像としては載せないですが、htmlを定義しておいてください。

results/results.blade.php
@extends('layouts.app')

@section('content')
    @if($hba1c >= 6.5)
        @include('results.high_hba1c')
    @else
        @include('results.low_hba1c')
    @endif    
@endsection

ここから条件分岐を本格的に書いていきます。まずは大きく2つに分けてみました。ちなみに$hba1cの値は上から3つ目のフォームに該当します。

results/high_hba1c.blade.php
<div class="center">
@if($mbgl>=126 && $ogtt>=200)
    <div class="a">糖尿病です</div>
@elseif($mbgl>=126 || $ogtt>=200)
    <div class="a">糖尿病です</div>
@else
    <div class="b">糖尿病の疑いがあります</div>
@endif
</div>
results/low_hba1c.blade.php
<div class="center">
@if($mbgl>=126 && $ogtt>=200)
    <div class="b">糖尿病の疑いがあります</div>
@elseif($mbgl>=126 || $ogtt>=200)
    <div class="b">糖尿病の疑いがあります</div>
@elseif($mbgl<110 && $ogtt<140)
    <div class="c">糖尿病ではありません</div>
@elseif($mbgl<110 || $ogtt<140)
    <div class="c">糖尿病ではありません</div>
@else
    <div class="d">糖尿病に近いです</div>
@endif
</div>

条件分岐はこれで以上となります。実際の糖尿病の判定基準はいろいろあり、これはあくまで一例です。
条件分岐がかなり複雑でわかりにくいと感じた方もおられると思いますが、書き方のパターンだけ理解していれば十分です笑
特にUsersController.phpとViewsのファイルの書き方が重要になるかと思います。

atsu_
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away