PHP
laravel
laravel5
blade
laravel5.4

【Laravel】Viewのbladeの書き方

個人的にはCakeのHTMLヘルパーより使いやすかな~~て感じします。

if文

index.php
@if ($val === null)
    <p>NULLだよ</p>
@else 
    <p>NULLじゃないよ</p>
@endif

for文

index.php
@for ($i = 1; $i < 10 ; $i++)
    <p>{{ $i }} 番目</p>
@endfor

js呼び出し

index.php
<!-- viewsから見たアドレスを書く views/common/_script.blade.php-->
@include('common._script')

この_script.blade.phpの中にscriptを書く
例:

_script.blade.php
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
    // jsのコード
});
</script>

PHPのClass読み込み

index.php
<!-- 第一引数はbladeで使うためのオブジェクト名第二引数はパス -->
@inject('value_generator', 'App\Libs\ValueGenerator')

CSRFトークン

フォームがある場合はこれをフォーム要素内に記述しないとTokenMismatchExceptionが発生する

index.php
{{ csrf_field() }}

PUTメソッド

更新処理を行う場合に必要

index.php
{{ method_field('PUT') }}

以下使用例

<form method="POST" action="{{ route('users.update', ['id' => $user->id]) }}">
    {{ csrf_field() }}
    {{ method_field('PUT') }}

    // 更新対象なデータ

    <button type="submit">編集する</button>
</form>

DELETEメソッド

削除処理を行う場合に必要

index.php
{{ method_field('DELETE') }}

以下使用例

<form method="POST" action="{{ route('users.destroy', ['id' => $user->id]) }}">
    {{ csrf_field() }}
    {{ method_field('DELETE') }}
    <button type="submit">削除する</button>
</form>

改行して表示

※eはエスケープ処理です

index.php
{!! nl2br(e( $comment )) !!}

共通のテンプレート内に呼び出して表示させる

例:親テンプレートの@yield('content')に子のコンテンツを表示させる場合

親(例:views/layouts/mypage.blade.php)

index.php
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>@yield('title')</title>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    </head>
    <body>
        @yield('content')
    </body>
</html>

子(例:views/mypages/index.blade.php)

index.php
<!-- 親テンプレート -->
@extends('layouts.mypage')

@section('title', 'ページタイトル')

<!-- 親テンプレートに表示させる場所 -->
@section('content')

Sessionの表示

index.php
@if(Session::has('message'))
    <div class="error_message">
        <p>{{ session('message') }}</p>
    </div>
@endif

以下も参考になるかもしれません

PHPのコードを記述する

index.php
@php
    echo 'hello';
@endphp

ただし公式からの注意

Tip!! Bladeはこの機能を提供していますが、数多く使用しているのであれば、それはテンプレートへ多すぎるロジックを埋め込んでいるサインです。

コメントアウト

HTMLソースには表示されません

index.php
{{-- コメント --}}

参考