迷い人

日々勉強。勉強の先に何か見つかるといいなぁ

Laravelでフォーム入力

フォームから「たこ焼きを焼くための最適な温度」を入力すると、「最適な温度!!」「温度高すぎ!」「温度低すぎ!」の何かを画面表示する機能を実装しました。

 

f:id:oyaoya1123:20200819213336p:plain

 

f:id:oyaoya1123:20200819213822p:plain

 

ちなみにリセットを押すとまた「たこ焼きを焼くために最適な温度は何度でしょう?」の画面に戻ります。

 

このWebアプリを作るためにいじったのはルートとコントローラとビューの3つです。

それぞれ簡単に解説します。

 

ルートの記述

web.phpに以下のように記述しました。

 

Route::get('/takoyaki_calc/', 'HelloController@takoyaki_calc')->name('takoyaki_calc');
Route::post('/takoyaki_calc/', 'HelloController@takoyaki_calc_post');

 

getの方は「http://localhost:8000/takoyaki_calc」に最初にアクセスした時にHelloControllerのtakoyaki_calcアクションを呼び出します。

 

またnameでtakoyaki_calcと宣言しているので、route('takoyaki_calc')で「http://localhost:8000/takoyaki_calc」を呼び出せるようになります。

 

postの方はgetで呼び出した画面に好きな温度を入力して、送信ボタンを押した時にHelloControllerのtakoyaki_calc_postアクションを呼び出します。

 

同じURLでもhttpメソッドが異なれば、ルートをそれぞれ記述して、アクションも別にできます。

 

コントローラの記述

続いてコントローラです。いつものように青本のHelloControllerをそのまま活用しています。

 

  public function takoyaki_calc()
  {
    $data =[ 'kekka' => 'たこ焼きを焼くための最適な温度は何度でしょう?', 'temperature' =>''];

    return view('hello.takoyaki_calculation', $data);
  }

  public function takoyaki_calc_post(Request $request)
  {
    $msg = $request->msg;

    if(ctype_digit($msg)) {
      $temperature = (int)$msg;
      if ($temperature > 250) {
        $data =[ 'kekka' => '温度高すぎ!', 'temperature' => $temperature];
      } elseif($temperature < 200) {
        $data =[ 'kekka' => '温度低すぎ!', 'temperature' => $temperature];
      } else {
        $data =[ 'kekka' => '最適温度!!!', 'temperature' => $temperature];
      }
    } else {
      $temperature = '';
      $data =[ 'kekka' => '整数を入力してね', 'temperature' => $temperature];
    }

    return view('hello.takoyaki_calculation', $data);
  }

 

takoyaki_calcアクションはview関数でtakoyaki_calculation.blade.php読み込んで、その内容を返しています。

 

その時パラメータとしてdataをビューに渡しています。

 

takoyaki_calc_postアクションはビューで入力された値を$request->msgで取り出して、まずctype_digit関数で整数かそうでないかの判断を行います。

 

整数であれば、数値によって$kekkaに文字列を入れて、再びビューに返します。

 

整数でなければ、$kekkaに「整数を入力してね」を入れて、再びビューに返します。

 

ビューには画面で入力した温度もtemperatureとして返すようにします。

 

ビューの記述

最後にビューの記述です。

<html>
    <head>
        <title>最適温度</title>
    </head>
    <body>
        {{$kekka}}
        <form action="/takoyaki_calc" method="post">
            {{ csrf_field() }}
            <input type="text" name="msg" value="{{$temperature}}">
            <input type="submit">
        </form>
        <a href="{{route('takoyaki_calc')}}">
            <button type="button">リセット</button>
        </a>
    </body>
</html>

 

最初にhttp://localhost:8000/takoyaki_calcにアクセスした時は、$kekkaに「たこ焼きを焼くための最適な温度は何度でしょう?」が格納されており、それが表示されます。

 

formでは、actionにルートのpostで記述した/takoyaki_calcを設定し、methodはpostにします。

 

これで送信ボタンを押すと、フォームに入力した値がHelloControllerのtakoyaki_calc_postアクションに渡されて、その結果が表示されるというわけです。

 

リセットボタンは画面を初期状態(httpメソッドがgetでフォーム画面が呼び出された状態)にするために配置しています。

 

まとめ

今回もルート→コントローラ→ビューの流れにそった基本的な処理を記述してみました。httpメソッド(getやpost)については過去解説しているので参考にしてください。

 

oyaoya1123.hatenablog.com