サーチ…
前書き
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.php
はlayouts/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 }}
結果:
コンテンツを入力