Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Laravel における Blade 拡張の ツラミ 第128回 PHP勉強会@東京
Slide 2
Slide 2 text
Laravel における Blade 拡張の ツラミ 第128回 PHP勉強会@東京 誰か . 助けて .
Slide 3
Slide 3 text
岡田 正平(おかだ しょうへい)@okashoi • 株式会社ウィルゲート 2015年新卒入社 • 開発室 ソリューションユニット 所属 • PHP, Laravel, Vue.js 3 自己紹介 Slides:
Slide 4
Slide 4 text
4 Blade ディレクティブ( @~ )は拡張できる ※ Blade … Laravel で採用されているテンプレートエンジン
Slide 5
Slide 5 text
5 原理説明 fuga'; }); } ↑これを書いておくと @hoge
fuga
このように展開される
Slide 6
Slide 6 text
やりたいこと @js(/index.js) と書くと、JS ファイルのタイムスタンプを パラメータとして付与して といった感じで展開させる 6 例)Cache busting を考える
Slide 7
Slide 7 text
7 とりあえずやってみる public function boot() { ¥Blade::directive('js', function ($path) { $fullPath = public_path('js' . $path); $src = "/js{$path}?v=" . ¥File::lastModified($fullPath); return ""; });
Slide 8
Slide 8 text
8 とりあえずやってみる public function boot() { ¥Blade::directive('js', function ($path) { $fullPath = public_path('js' . $path); $src = "/js{$path}?v=" . ¥File::lastModified($fullPath); return ""; }); ファイルのタイムスタンプを取得
Slide 9
Slide 9 text
9 とりあえずやってみる:結果 @js(/index.js) 一見よさそう
Slide 10
Slide 10 text
50点
Slide 11
Slide 11 text
storage/framework/views 下のキャッシュファイルの中身もまた (view キャッシュが残っている限り) JS ファイルのタイムスタンプが更新されても反映されない 11 なぜ?
Slide 12
Slide 12 text
storage/framework/views 下のキャッシュファイルの中身もまた (view キャッシュが残っている限り) JS ファイルのタイムスタンプが更新されても反映されない ➢ Blade ディレクティブは echo をする PHP タグを文字列として返さないといけない 12 なぜ?
Slide 13
Slide 13 text
「文字列リテラルはシングルクオートね(^^)」を守ると 13 書き換え① public function boot() { ¥Blade::directive('js', function ($path) { $fullPath = public_path('js' . $path); return '¥' ?>'; });
Slide 14
Slide 14 text
「文字列リテラルはシングルクオートね(^^)」を守ると 14 書き換え① public function boot() { ¥Blade::directive('js', function ($path) { $fullPath = public_path('js' . $path); return '¥' ?>'; }); 主にこのへんが ツライ
Slide 15
Slide 15 text
ダブルクオートを使って変数展開を活用 15 書き換え② public function boot() { ¥Blade::directive('js', function ($path) { $fullPath = public_path('js' . $path); return "' ?>"; }); 多少はマシ?でもやっぱりツライ
Slide 16
Slide 16 text
動的に変わるのは下線の部分だけなので、そこだけを echo する 16 書き換え③
Slide 17
Slide 17 text
動的に変わるのは下線の部分だけなので、そこだけを echo する 17 書き換え③ public function boot() { ¥Blade::directive('js', function ($path) { $fullPath = public_path('js' . $path); return "¥">"; }); 思ったよりツラミは改善されない
Slide 18
Slide 18 text
• ほかにも sprintf() とか使って頑張ってみても全然可読にならない • ていうかこんなコードメンテしたくない! • 欲しい文字列(HTMLタグ)を返すメソッドが生えたクラスを用意して Facade とかにして ってした方が圧倒的に楽 • Balde 拡張の意義って一体……? 18 そんなことより {!! ViewHelper::js('/index.js') !!}
Slide 19
Slide 19 text
Blade 拡張のうまい使い道を 知ってる方は教えてください 19 というわけで…… 完