サーチ…


前書き

Laravelは、ブレードテンプレートエンジンをそのままの状態でサポートします。ブレードテンプレートエンジンを使用すると、マスターテンプレートと子テンプレートを作成してマスターテンプレートからコンテンツをロードすることができます。ブレードファイル内に変数、ループ、および条件文を含めることができます。

再生回数:紹介

ビューには、MVCパターンで、ユーザーにデータを提示する方法に関するロジックが含まれています。 Webアプリケーションでは、典型的には、それぞれの応答でユーザーに返されるHTML出力を生成するために使用されます。デフォルトでは、Laravelのビューはresources/viewsディレクトリに保存されresources/views

ビューはviewヘルパー関数を使用して呼び出すことができます:

view(string $path, array $data = [])

ヘルパーの最初のパラメータはビューファイルへのパスで、2番目のパラメータはビューに渡すデータのオプションの配列です。

したがって、 resources/views/example.phpを呼び出すには、以下を使用します。

view('example'); 

resources/views/parts/header/navigation.phpようなresources/viewsディレクトリ内のサブフォルダ内のファイルを表示するには、ドット表記を使用して呼び出すことができます: view('parts.header.navigation');

resources/views/example.phpなどのビューファイル内では、HTMLとPHPの両方を自由に組み込むことができます。

<html>
    <head>
        <title>Hello world!</title>
    </head>
    <body>
        <h1>Welcome!</h1>
        <p>Your name is: <?php echo $name; ?></p>
    </body>
</html>

前の例(Blade固有の構文は使用していません)では、 $name変数を出力しています。この値をビューに渡すには、ビューヘルパーを呼び出すときに値の配列を渡します。

view('example', ['name' => $name]);

compact()ヘルパーを使用することもできます。この場合、compact()に渡される文字列は、ビューに渡す変数の名前に対応します。

view('example', compact('name'));

刃の種類の命名規則

データを送り返して表示します。あなたは複数単語のvariable underscoreを使うことができvariableが、 - laravelを指定するとエラーになります。

このように、エラー( user-address内にhyphen ( - )

view('example',['user-address' => 'Some Address']);

これを行う正しい方法

view('example', ['user_address' => 'Some Address']);

制御構造

Bladeは、一般的なPHPコントロール構造に便利な構文を提供します。

各コントロール構造体は@[structure]で始まり、 @[endstructure] 。タグ内では、通常のHTMLを入力するだけで、Blade構文で変数を含めることに注意してください。

条件式

'If'ステートメント

@if ($i > 10)
    <p>{{ $i }} is large.</p>
@elseif ($i == 10)
    <p>{{ $i }} is ten.</p>
@else
    <p>{{ $i }} is small.</p>
@endif

「言わないと」声明

( 'ない場合は短い構文。')

@unless ($user->hasName())
    <p>A user has no name.</p>
@endunless

ループ

'While'ループ

@while (true)
    <p>I'm looping forever.</p>
@endwhile

'Foreach'ループ

@foreach ($users as $id => $name)
    <p>User {{ $name }} has ID {{ $id }}.</p>
@endforeach

「Forelse」ループ

( 'foreach'ループと同じですが、反復される配列式が空の場合に実行される特殊な@emptyディレクティブを追加して、デフォルトのコンテンツを表示します)。

@forelse($posts as $post)
    <p>{{ $post }} is the post content.</p>
@empty
    <p>There are no posts.</p>
@endforelse

ループ内では、ループの状態に関する情報を含む特殊な$loop変数を使用できます。

プロパティ説明
$loop->index 現在のループ反復のインデックス(0から始まる)。
$loop->iteration 現在のループ反復(1から開始)。
$loop->remaining 残りのループ反復。
$loop->count 反復される配列内のアイテムの総数。
$loop->first これがループを通る最初の反復であるかどうか。
$loop->last これがループを通る最後の反復であるかどうか。
$loop->depth 現在のループのネストレベル。
$loop->parent ネストされたループの場合、親のループ変数。

例:

@foreach ($users as $user)
  @foreach ($user->posts as $post)
        @if ($loop->parent->first)
            This is first iteration of the parent loop.
        @endif
    @endforeach
@endforeach

Laravel 5.2.22以降、 @break @continue@breakという指令も使用できます

プロパティ説明
@continue 現在の反復を停止し、次の反復を開始します。
@break 現在のループを停止します。

例:

@foreach ($users as $user)
    @continue ($user->id == 2)
        <p>{{ $user->id }} {{ $user->name }}</p>
    @break ($user->id == 4)
@endforeach

次に( 5人以上のユーザーがIDでソートされていて、IDがない場合 )、ページはレンダリングされます

1 Dave
3 John
4 William

PHP式をエコーする

二重中括弧{{ $variable }}内のPHP式は、 eヘルパー関数の実行後にechoされます 。 (だから、(特殊文字をhtmlの<>"'&安全に対応するHTMLエンティティのために交換されている)。)(PHP式は文字列に評価される必要があり、そうでない場合は例外がスローされます。)

変数をエコーする

{{ $variable }}

配列内の要素をエコーする

{{ $array["key"] }}

オブジェクトプロパティをエコーする

{{ $object->property }}

関数呼び出しの結果をエコーする

{{ strtolower($variable) }}

存在の確認

通常、PHPでは、変数が設定されているかどうかをチェックして、それを印刷します

  • PHP 7より前
<?php echo isset($variable) ? $variable : 'Default'; ?>
  • PHP 7の後( "Null coalescing operator"を使用)
<?php echo $variable ?? 'Default'; ?>

Bladeオペレータorこれを簡単にする:

{{ $variable or 'Default' }}

生のエコー

上述したように、規則的な二重括弧の構文は{{ }}のを通して濾過さhtmlspecialchars機能、セキュリティのために(図中のHTMLの悪質な注入を防止します)。 PHPの式の結果として出力されるHTMLコンテンツのブロックを出力する場合など、この動作を回避するには、次の構文を使用します。

{!! $myHtmlString !!}

絶対に必要な場合を除き、標準の{{ }}構文を使用してデータをエスケープするのがベストプラクティスと考えられます。また、信頼できないコンテンツ(サイトのユーザーから提供されたコンテンツ)をエコーする場合は、 {!! !!}構文です。

部分的なビューを含む

Bladeでは、部分ビュー(「部分」と呼ばれる)を次のようにページに直接含めることもできます。

@include('includes.info', ['title' => 'Information Station'])

上記のコードは 'views / includes / info.blade.php'のビューを含みます。また、値 'Information Station'を持つ変数$titleを渡します。

一般に、インクルードされたページは呼び出しページがアクセス可能な変数にアクセスできます。たとえば、次のような場合:

{{$user}} // Outputs 'abc123'
@include('includes.info')

'includes / info.blade.php'には以下のものがあります:

<p>{{$user}} is the current user.</p>

次に、ページがレンダリングされます。

abc123
abc123 is the current user.

それぞれを含む

場合によっては、 includeステートメントとforeachステートメントを組み合わせ、 include内のforeachループ内の変数にアクセスすることもあります。この場合、Bladeの@eachディレクティブを使用して@each

@each('includes.job', $jobs, 'job')

最初のパラメータは、含めるページです。 2番目のパラメータは、反復処理する配列です。 3番目のパラメータは、配列の要素に割り当てられた変数です。上記の記述は次のものと同等です:

@foreach($jobs as $job)
    @include('includes.job', ['job' => $job])
@endforeach

@eachディレクティブにオプションの第4引数を渡して、配列が空のときに表示するビューを指定することもできます。

@each('includes.job', $jobs, 'job', 'includes.jobsEmpty')

レイアウト継承

レイアウトはビューファイルであり、他のビューによって拡張され、そのブロックにコードブロックを挿入します。例えば:

parent.blade.php:

<html>
    <head>
        <style type='text/css'>
        @yield('styling')
        </style>
    </head>
    <body>
        <div class='main'>
        @yield('main-content')
        </div>
    </body>
</html>

child.blade.php:

@extends('parent')

@section('styling')
.main {
    color: red;
}
@stop

@section('main-content')
This is child page!
@stop

otherpage.blade.php:

@extends('parent')

@section('styling')
.main {
    color: blue;
}
@stop

@section('main-content')
This is another page!
@stop

ここでは、それぞれが親を拡張する2つの子ページの例を示します。子ページは、 @yieldを定義し@section 。これは、適切な@yieldステートメントで親に挿入されます。

そうでレンダリングされたビューView::make('child')これは子ページです!」と言うだろう赤で、一方、 View::make('otherpage')テキスト「 これは別のある場合を除き、同じHTMLを生成しますページ! "を青色で表示します。

ビューファイルを分離するのは一般的です。たとえば、レイアウトファイル用のレイアウトフォルダと、さまざまな特定の個々のビュー用の別々のフォルダがあります。

レイアウトは、個々のビューごとにHTMLボイラープレートをすべて書き出すことなく、サイドバーまたはヘッダーを追加するなど、すべてのページに表示するコードを適用するためのものです。

ビューは繰り返し拡張できます。つまり、 page3@extend('page2')page2@extend('page1')です。

extendコマンドは、 View::makeおよび@includeと同じ構文を使用するため、ファイルlayouts/main/page.blade.phplayouts/main/page.blade.phpとしてアクセスされlayouts.main.page

すべてのビューにデータを共有する

場合によっては、多くのビューで同じデータを設定する必要があります。

View :: shareを使用する

// "View" is the View Facade
View::share('shareddata', $data);

この後、 $dataの内容は$shareddataという名前ですべてのビューで使用可能になります。

View::shareは、通常、サービスプロバイダやコントローラのコンストラクタで呼び出されるため、データはそのコントローラから返されたビューでのみ共有されます。

View :: composerを使用する

ビューコンポーザーは、ビューのレンダリング時に呼び出されるコールバックまたはクラスメソッドです。ビューをレンダリングするたびにビューにバインドするデータがある場合、ビュー・コンポーザーを使用して、そのロジックを単一の場所に編成することができます。変数を特定のビューまたはすべてのビューに直接バインドできます。

クロージャベースの作曲家

use Illuminate\Support\Facades\View;

// ...

View::composer('*', function ($view) {
    $view->with('somedata', $data);
});

クラスベースの作曲家

use Illuminate\Support\Facades\View;

// ...

View::composer('*', 'App\Http\ViewComposers\SomeComposer');

View::shareと同様に、サービスプロバイダに作曲家を登録するのが最善です。

コンポーザークラスのアプローチを使用すると、 App/Http/ViewComposers/SomeComposer.phpに次のようにApp/Http/ViewComposers/SomeComposer.phpれます。

use Illuminate\Contracts\View\View;

class SomeComposer
{
    public function compose(View $view)
    {
        $view->with('somedata', $data);
    }
}

これらの例では、作曲家の登録に'*'が使用されています。このパラメータは、コンポーザーを登録するビュー名( *はワイルドカード)と一致する文字列です。サブフォルダの下にあるルートグループの単一のビュー( 'home' )を選択することもできます( 'users.*' )。

任意のPHPコードを実行する

懸念事項を厳密にphpうとすると、ビュー内でそのようなことをするのは適切ではないかもしれませんが、 php Bladeディレクティブは、たとえば変数を設定するためにPHPコードを実行する方法を許可します:

@php($varName = 'Enter content ')

(と同じ:)

@php
    $varName = 'Enter content ';
@endphp

後:

{{ $varName }}

結果:

コンテンツを入力



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow