ヤマカサのプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

Laravel 学習 part. 3

Blade

入力フォーム

Blade を利用して入力フォームを記述します。

index.blade.php
<html>

<head>
    <title>Hello/Index</title>
    <style>
        body {
            font-size: 16pt;
            color: #999;
        }

        h1 {
            font-size: 50pt;
            text-align: right;
            color: #f6f6f6;
            margin: -20px 0px -30px -px;
            letter-spacing: -4pt;
        }
    </style>
</head>

<body>
    <h1>Blade/Index</h1>
    <p>{{$msg}}</p>
    <form method="POST" action="/hello">
        {{ csrf_field() }}
        <input type="text" name="msg">
        <input type="submit">
    </form>
</body>

</html>
HelloController.php

コントローラで POSTのアクションを記述します。

<?php
    public function post(Request $request)
    {
        $msg = $request->msg;
        $data = [
            'msg' => 'こんにちは、' . $msg . 'さん。',
        ];
        return view('hello.index', $data);
    }
web.php

POST を利用するためにルート設定を追加します。

<?php
Route::post('hello', 'HelloController@post');

f:id:yamakasa3:20191114155931p:plain

Bladeの構文

変数

先ほどの Blade テンプレートで値を展開しているように、値や関数を {{変数}} という形で利用できます。

@ifディレクティブ

プログラミング言語の構文を利用することができます。

index.blade.php
<html>

<head>
    <title>Hello/Index</title>
    <style>
        body {
            font-size: 16pt;
            color: #999;
        }

        h1 {
            font-size: 50pt;
            text-align: right;
            color: #f6f6f6;
            margin: -20px 0px -30px -px;
            letter-spacing: -4pt;
        }
    </style>
</head>

<body>
    <h1>Blade/Index</h1>
    @if ($msg != '')
    <p>こんにちは、{{$msg}}さん。</p>
    @else
    <p>何か書いてください。</p>
    @endif
    <form method="POST" action="/hello">
        {{ csrf_field() }}
        <input type="text" name="msg">
        <input type="submit">
    </form>
</body>

</html>

@for

test1.php
<html>

<head>
    <title>Test1</title>
</head>

<body>
    <h1>for文</h1>
    @for ($i = 0; $i < 5; $i++)
        <p>{{ $i }}</p>
    @endfor
</body>

</html>

f:id:yamakasa3:20191115013818p:plain