狠狠撸

狠狠撸Share a Scribd company logo
Laravelのテンプレートエンジン
Bladeの機能
Who are you?
庄埜 詩織
株式会社chatbox エンジニア
Shono Shiori
まだまだ勉強中
? テンプレートとデータモデルの2つでHTMLを生成する
 (デザインとロジックの分離)
? 分業しやすい、使い回し◎、セキュリティ◎
テンプレートエンジンとは
Data
(ロジック)
Template
(デザイン)
Document
Templating
Engine
※図は「PHP+MySQLマスターブック 笔268」を参考にしました。
Bladeの基本
? Laravelのテンプレートエンジン
? ビューに生のPHPを書いてもOK
? 拡張子は.blade.php
? resources/views ディレクトリの下に置く
? コメントは {{--コメント--}} で書く
 (HTMLには吐き出されない)
データの表示
テンプレートエンジンの
一番のポイント
if文?ループ文
{ } や ( ) は使わず、
@ if といった書き方でOK
さいごに @endif を忘れずに
便利な機能
Stacksで他のビューにpush
クラスのメソッドが使える
Blade間の共通部品も作れる
おしながき
Laravel 5.2
新機能も !!
レイアウトの継承
ヘッダー、フッターなど
レイアウトを部品化して
使いまわせる
1 22 3
4
データの表示
Route::get('greeting', function () {
return view('welcome', ['name' => 'Samantha']);
});
Hello, {{ $name }}.   // 出力結果: Hello, Samantha. ???①
The current UNIX timestamp is {{ time() }}. ???②
Hello, @{{ name }}. // 「 Bladeの {{}} だ」と認識される ???③
blade.php
※XSS(クロスサイトスクリプティング):他人のウェブサイトへ悪意のあるスクリプトを埋め込むこと。
① タグのまま出力されるので XSS 対策になる
② PHP関数もそのまま埋め込める
③ JSフレームワークを使う時は @をつける
route.php
? デフォルト値の設定が可能
// 3項演算子
{{ isset($name) ? $name : 'Default' }}
// Blade 特有の書き方
{{ $name or 'Default' }}
変数を出力したいけど値がセットされてるかわからないときに使える
Blade特有の書き方だと or だけで済む
{ !! hoge !! } と書くとエスケープされないので注意
Hello, {!! $name !!}. // 出力結果:Hello, $name.
If 文?ループ文
@if (count($records) === 1)
I have one record!
@elseif (count($records) > 1)
I have multiple records!
@else
I don't have any records!
@endif
? @if, @elseif
最後の @endif を忘れないように注意
@unless (Auth::check())
You are not signed in. // ログインしてなければ表示
@endunless
? @unless
<title>
@hasSection('title')
@yield('title') - App Name
@else
App Name
@endif
</title>
? @hasSection
@for ($i = 0; $i < 10; $i++)
The current value is {{ $i }}
@endfor
@foreach ($users as $user)
<p>This is user {{ $user->id }}</p>
@endforeach
@forelse ($users as $user)
<li>{{ $user->name }}</li>
@empty
<p>No users</p>
@endforelse
@while (true)
<p>I'm looping forever.</p>
@endwhile
? @for, @foreach, @forelse, @while
@foreach ($users as $user)
@if($user->type == 1)
@continue
@endif
<li>{{ $user->name }}</li>
@if($user->number == 5)
@break
@endif
@endforeach
// 一行でも書ける
@foreach ($users as $user)
@continue($user->type == 1)
<li>{{ $user->name }}</li>
@break($user->number == 5)
@endforeach
? @continue, @break も使えます
<html>
<head>
<title>App Name - @yield('title')</title>
</head>
<body>
@section('sidebar')
This is the master sidebar.
@show
<div class="container">
@yield('content')
</div>
</body>
</html>
master.blade.php
レイアウトの継承
? @yieldで子のブロックを出力する
? @sectionは親のブロックを子テンプレートに出力する
? @extendsで親ページのビューを継承する
@extends('layouts.master')
@section('title', 'Page Title')
@section('sidebar')
@parent
<p>This is appended to the master sidebar.</p>
@endsection
@section('content')
<p>This is my body content.</p>
@endsection
呼び出すときは子テンプレートのビューを呼び出すだけで OK
Route::get('blade', function () {
return view('child');
});
child.blade.php
<div>
@include('shared.errors')
<form>
<!-- Form Contents -->
</form>
</div>
// データも渡せます
@include('view.name', ['some' => 'data'])
? @includeで既存のビューを読み込める
__DIR__ や __FILE__ を使うとキャッシュされたビューを参照するので使わない方がいい
便利な機能
  ビューやレイアウトが pushできる
  子ビューの中身を親ビューでも見失わずに済む、などのメリット
@push('scripts')
<script src=/slideshow/20160422-laravelosaka/75748134/"/example.js"></script>
@endpush
? @stacks
<head>
<!-- Head Contents -->
@stack('scripts')
</head>
child.blade.php
master.blade.php
? @inject:サービスの注入
@inject('metrics', 'AppServicesMetricsService')
<div>
Monthly Revenue: {{ $metrics->monthlyRevenue() }}.
</div>
Laravelのサービスコンテナからサービスを取得して Blade内で使える
最初の引数はそのサービスを取り込む変数名、第2引数が対象となるクラス名
※使用前はphp artisan view:clear でキャッシュを消去
? directive の登録
<?php
namespace AppProviders;
use Blade;
use IlluminateSupportServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Blade::directive('datetime', function($expression) {
return "<?php echo with{$expression}->format('m/d/Y H:i'); ?>";
});
}
}
自分でディレクティブを作れる(上のコードだと @datetime($var) で呼び出し)
使用前は php artisan view:clear でキャッシュを消去する
Thanks!
Any questions?
You can find me at:
@username
user@mail.me

More Related Content

Similar to 20160422 laravel.osaka (20)

仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
Hiroaki KOBAYASHI
?
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkSpring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Toshiaki Maki
?
意図を表现するプログラミング
意図を表现するプログラミング意図を表现するプログラミング
意図を表现するプログラミング
Atsuhiro Kubo
?
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
Rui Hirokawa
?
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
Kentaro Matsui
?
知って得する标準関数の使い方
知って得する标準関数の使い方知って得する标準関数の使い方
知って得する标準関数の使い方
Soudai Sone
?
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
Sotaro Karasawa
?
奥别产础笔滨ではじめる辫丑辫入门
奥别产础笔滨ではじめる辫丑辫入门奥别产础笔滨ではじめる辫丑辫入门
奥别产础笔滨ではじめる辫丑辫入门
Hiroaki Murayama
?
PHP初心者セッション2023 ?ChatGPT時代の簡単な始め方?
PHP初心者セッション2023 ?ChatGPT時代の簡単な始め方?PHP初心者セッション2023 ?ChatGPT時代の簡単な始め方?
PHP初心者セッション2023 ?ChatGPT時代の簡単な始め方?
Hideo Kashioka
?
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
Yusuke Ando
?
颁补办别笔贬笔で开発する时に统一しておきたいコーディング内容(080316)
颁补办别笔贬笔で开発する时に统一しておきたいコーディング内容(080316)颁补办别笔贬笔で开発する时に统一しておきたいコーディング内容(080316)
颁补办别笔贬笔で开発する时に统一しておきたいコーディング内容(080316)
柴田 篤志
?
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
kenjis
?
<第1回>尝补谤补惫别濒ハンズオンセミナー
<第1回>尝补谤补惫别濒ハンズオンセミナー<第1回>尝补谤补惫别濒ハンズオンセミナー
<第1回>尝补谤补惫别濒ハンズオンセミナー
Tatsuyoshi Mashiko
?
Laravel 5.3 て? basic task list を作ろう!
Laravel 5.3 て? basic task list を作ろう!Laravel 5.3 て? basic task list を作ろう!
Laravel 5.3 て? basic task list を作ろう!
シオリ ショウノ
?
奥颁翱2012「笔贬笔教室」
奥颁翱2012「笔贬笔教室」奥颁翱2012「笔贬笔教室」
奥颁翱2012「笔贬笔教室」
Takuma Morikawa
?
运用构筑技术者の為の笔厂プログラミング第2回
运用构筑技术者の為の笔厂プログラミング第2回运用构筑技术者の為の笔厂プログラミング第2回
运用构筑技术者の為の笔厂プログラミング第2回
Shigeharu Yamaoka
?
flow による型のある世界入門
flow による型のある世界入門flow による型のある世界入門
flow による型のある世界入門
sairoutine
?
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
Hiroaki KOBAYASHI
?
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframeworkSpring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
Toshiaki Maki
?
意図を表现するプログラミング
意図を表现するプログラミング意図を表现するプログラミング
意図を表现するプログラミング
Atsuhiro Kubo
?
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
Rui Hirokawa
?
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
Kentaro Matsui
?
知って得する标準関数の使い方
知って得する标準関数の使い方知って得する标準関数の使い方
知って得する标準関数の使い方
Soudai Sone
?
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
Sotaro Karasawa
?
奥别产础笔滨ではじめる辫丑辫入门
奥别产础笔滨ではじめる辫丑辫入门奥别产础笔滨ではじめる辫丑辫入门
奥别产础笔滨ではじめる辫丑辫入门
Hiroaki Murayama
?
PHP初心者セッション2023 ?ChatGPT時代の簡単な始め方?
PHP初心者セッション2023 ?ChatGPT時代の簡単な始め方?PHP初心者セッション2023 ?ChatGPT時代の簡単な始め方?
PHP初心者セッション2023 ?ChatGPT時代の簡単な始め方?
Hideo Kashioka
?
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
Yusuke Ando
?
颁补办别笔贬笔で开発する时に统一しておきたいコーディング内容(080316)
颁补办别笔贬笔で开発する时に统一しておきたいコーディング内容(080316)颁补办别笔贬笔で开発する时に统一しておきたいコーディング内容(080316)
颁补办别笔贬笔で开発する时に统一しておきたいコーディング内容(080316)
柴田 篤志
?
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
kenjis
?
<第1回>尝补谤补惫别濒ハンズオンセミナー
<第1回>尝补谤补惫别濒ハンズオンセミナー<第1回>尝补谤补惫别濒ハンズオンセミナー
<第1回>尝补谤补惫别濒ハンズオンセミナー
Tatsuyoshi Mashiko
?
Laravel 5.3 て? basic task list を作ろう!
Laravel 5.3 て? basic task list を作ろう!Laravel 5.3 て? basic task list を作ろう!
Laravel 5.3 て? basic task list を作ろう!
シオリ ショウノ
?
奥颁翱2012「笔贬笔教室」
奥颁翱2012「笔贬笔教室」奥颁翱2012「笔贬笔教室」
奥颁翱2012「笔贬笔教室」
Takuma Morikawa
?
运用构筑技术者の為の笔厂プログラミング第2回
运用构筑技术者の為の笔厂プログラミング第2回运用构筑技术者の為の笔厂プログラミング第2回
运用构筑技术者の為の笔厂プログラミング第2回
Shigeharu Yamaoka
?
flow による型のある世界入門
flow による型のある世界入門flow による型のある世界入門
flow による型のある世界入門
sairoutine
?

More from シオリ ショウノ (10)

狈辞迟颈蹿颈肠补迟颈辞苍蝉を使った厂濒补肠办通知
狈辞迟颈蹿颈肠补迟颈辞苍蝉を使った厂濒补肠办通知狈辞迟颈蹿颈肠补迟颈辞苍蝉を使った厂濒补肠办通知
狈辞迟颈蹿颈肠补迟颈辞苍蝉を使った厂濒补肠办通知
シオリ ショウノ
?
肌て?感し?たテ?ィレクションとマネシ?メント
肌て?感し?たテ?ィレクションとマネシ?メント肌て?感し?たテ?ィレクションとマネシ?メント
肌て?感し?たテ?ィレクションとマネシ?メント
シオリ ショウノ
?
痴耻别.箩蝉て?游んて?みよう
痴耻别.箩蝉て?游んて?みよう痴耻别.箩蝉て?游んて?みよう
痴耻别.箩蝉て?游んて?みよう
シオリ ショウノ
?
PHPカンファレンス関西2017 スポンサー募集中!
PHPカンファレンス関西2017 スポンサー募集中!PHPカンファレンス関西2017 スポンサー募集中!
PHPカンファレンス関西2017 スポンサー募集中!
シオリ ショウノ
?
骋耻濒辫て?学ふ?厂补蝉蝉と笔耻驳
骋耻濒辫て?学ふ?厂补蝉蝉と笔耻驳骋耻濒辫て?学ふ?厂补蝉蝉と笔耻驳
骋耻濒辫て?学ふ?厂补蝉蝉と笔耻驳
シオリ ショウノ
?
ハンス?オン入门
ハンス?オン入门ハンス?オン入门
ハンス?オン入门
シオリ ショウノ
?
厂别谤惫颈肠别と搁别辫辞蝉颈迟辞谤测
厂别谤惫颈肠别と搁别辫辞蝉颈迟辞谤测厂别谤惫颈肠别と搁别辫辞蝉颈迟辞谤测
厂别谤惫颈肠别と搁别辫辞蝉颈迟辞谤测
シオリ ショウノ
?
Webpackにトライ 基本編
Webpackにトライ 基本編Webpackにトライ 基本編
Webpackにトライ 基本編
シオリ ショウノ
?
颁补谤产辞苍ライブラリとちゃんと向き合ってみる
颁补谤产辞苍ライブラリとちゃんと向き合ってみる颁补谤产辞苍ライブラリとちゃんと向き合ってみる
颁补谤产辞苍ライブラリとちゃんと向き合ってみる
シオリ ショウノ
?
尝补谤补惫别濒の5.3の新机能
尝补谤补惫别濒の5.3の新机能尝补谤补惫别濒の5.3の新机能
尝补谤补惫别濒の5.3の新机能
シオリ ショウノ
?
狈辞迟颈蹿颈肠补迟颈辞苍蝉を使った厂濒补肠办通知
狈辞迟颈蹿颈肠补迟颈辞苍蝉を使った厂濒补肠办通知狈辞迟颈蹿颈肠补迟颈辞苍蝉を使った厂濒补肠办通知
狈辞迟颈蹿颈肠补迟颈辞苍蝉を使った厂濒补肠办通知
シオリ ショウノ
?
肌て?感し?たテ?ィレクションとマネシ?メント
肌て?感し?たテ?ィレクションとマネシ?メント肌て?感し?たテ?ィレクションとマネシ?メント
肌て?感し?たテ?ィレクションとマネシ?メント
シオリ ショウノ
?
PHPカンファレンス関西2017 スポンサー募集中!
PHPカンファレンス関西2017 スポンサー募集中!PHPカンファレンス関西2017 スポンサー募集中!
PHPカンファレンス関西2017 スポンサー募集中!
シオリ ショウノ
?
骋耻濒辫て?学ふ?厂补蝉蝉と笔耻驳
骋耻濒辫て?学ふ?厂补蝉蝉と笔耻驳骋耻濒辫て?学ふ?厂补蝉蝉と笔耻驳
骋耻濒辫て?学ふ?厂补蝉蝉と笔耻驳
シオリ ショウノ
?
厂别谤惫颈肠别と搁别辫辞蝉颈迟辞谤测
厂别谤惫颈肠别と搁别辫辞蝉颈迟辞谤测厂别谤惫颈肠别と搁别辫辞蝉颈迟辞谤测
厂别谤惫颈肠别と搁别辫辞蝉颈迟辞谤测
シオリ ショウノ
?
颁补谤产辞苍ライブラリとちゃんと向き合ってみる
颁补谤产辞苍ライブラリとちゃんと向き合ってみる颁补谤产辞苍ライブラリとちゃんと向き合ってみる
颁补谤产辞苍ライブラリとちゃんと向き合ってみる
シオリ ショウノ
?

Recently uploaded (7)

LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアルLoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
CRI Japan, Inc.
?
2025 04 Dayne
2025 04 Dayne2025 04 Dayne
2025 04 Dayne
arts yokohama
?
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアルLoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
CRI Japan, Inc.
?
2025 01 スマート抵抗チェッカー
2025 01 スマート抵抗チェッカー2025 01 スマート抵抗チェッカー
2025 01 スマート抵抗チェッカー
arts yokohama
?
Guidance for beginners and experts on how to set up a Windows driver developm...
Guidance for beginners and experts on how to set up a Windows driver developm...Guidance for beginners and experts on how to set up a Windows driver developm...
Guidance for beginners and experts on how to set up a Windows driver developm...
Atomu Hidaka
?
2025 02 TankyuDock
2025 02 TankyuDock2025 02 TankyuDock
2025 02 TankyuDock
arts yokohama
?
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
Matsushita Laboratory
?
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアルLoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
LoRaWAN 5個マルチプッシュボタン – PB05-L  日本語ユーザーマニュアル
CRI Japan, Inc.
?
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアルLoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
CRI Japan, Inc.
?
2025 01 スマート抵抗チェッカー
2025 01 スマート抵抗チェッカー2025 01 スマート抵抗チェッカー
2025 01 スマート抵抗チェッカー
arts yokohama
?
Guidance for beginners and experts on how to set up a Windows driver developm...
Guidance for beginners and experts on how to set up a Windows driver developm...Guidance for beginners and experts on how to set up a Windows driver developm...
Guidance for beginners and experts on how to set up a Windows driver developm...
Atomu Hidaka
?
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
Matsushita Laboratory
?

20160422 laravel.osaka