Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Laravel における Blade 拡張のツラミ

Laravel における Blade 拡張のツラミ

2018-07-25 開催の「第128回 PHP勉強会@東京」におけるLT資料です

https://phpstudy.doorkeeper.jp/events/77255

Shohei Okada

July 25, 2018
Tweet

More Decks by Shohei Okada

Other Decks in Programming

Transcript

  1. 5 原理説明 <?php namespace App¥Providers; use Illuminate¥Support¥ServiceProvider; class AppServiceProvider extends

    ServiceProvider { public function boot() { ¥Blade::directive('hoge', function () { return '<div>fuga</div>'; }); } ↑これを書いておくと @hoge <div>fuga</div> このように展開される
  2. 7 とりあえずやってみる public function boot() { ¥Blade::directive('js', function ($path) {

    $fullPath = public_path('js' . $path); $src = "/js{$path}?v=" . ¥File::lastModified($fullPath); return "<script src=¥"{$src}¥"></script>"; });
  3. 8 とりあえずやってみる public function boot() { ¥Blade::directive('js', function ($path) {

    $fullPath = public_path('js' . $path); $src = "/js{$path}?v=" . ¥File::lastModified($fullPath); return "<script src=¥"{$src}¥"></script>"; }); ファイルのタイムスタンプを取得
  4. 「文字列リテラルはシングルクオートね(^^)」を守ると 13 書き換え① public function boot() { ¥Blade::directive('js', function ($path)

    { $fullPath = public_path('js' . $path); return '<?php echo ¥'<script src="/js' . $path . '?v=¥' . ¥¥File::lastModified(¥'' . $fullPath . '¥') . ¥'"></script>¥' ?>'; });
  5. 「文字列リテラルはシングルクオートね(^^)」を守ると 14 書き換え① public function boot() { ¥Blade::directive('js', function ($path)

    { $fullPath = public_path('js' . $path); return '<?php echo ¥'<script src="/js' . $path . '?v=¥' . ¥¥File::lastModified(¥'' . $fullPath . '¥') . ¥'"></script>¥' ?>'; }); 主にこのへんが ツライ
  6. ダブルクオートを使って変数展開を活用 15 書き換え② public function boot() { ¥Blade::directive('js', function ($path)

    { $fullPath = public_path('js' . $path); return "<?php echo '<script src=¥"/js{$path}?v=' . ¥¥File::lastModified('{$fullPath}') . '¥"></script>' ?>"; }); 多少はマシ?でもやっぱりツライ
  7. 動的に変わるのは下線の部分だけなので、そこだけを echo する 17 書き換え③ <script src="/js/index.js?v=1532351569"></script> public function boot()

    { ¥Blade::directive('js', function ($path) { $fullPath = public_path('js' . $path); return "<script src=¥"/js{$path}?v=<?php echo ¥¥File::lastModified('{$fullPath}') ?>¥"></script>"; }); 思ったよりツラミは改善されない