はじめに

Laravel には @if@csrf など、Blade ファイル中で利用可能な便利なディレクティブが用意されている。

「利用可能なディレクティブとして何があるかをソースから調べる方法」を整理した。
Bladeテンプレート - Readouble にも記載はあるが、一覧として見たかった。

なお、あくまでも「何があるか」なので各ディレクティブの使用方法などは特に書いてない。

TL;DR

  • Illuminate/View/Compilers/Concerns/ を調べる
    • grep, awk, sed あたりを使うと OK

目次

  1. はじめに
  2. TL;DR
  3. 環境・条件
  4. 詳細
    1. 結論: Laravel(v5.7.28) で利用可能なディレクティブ
    2. 抽出方法
  5. まとめ
  6. 参考文献

環境・条件

1
2
3
$ composer info laravel/framework
name : laravel/framework
versions : * v5.7.28

詳細

結論: Laravel(v5.7.28) で利用可能なディレクティブ

以下が Laravel v5.7.28 における全ディレクティブ(のはず)。

  • @can
  • @cannot
  • @canany
  • @elsecan
  • @elsecannot
  • @elsecanany
  • @endcan
  • @endcannot
  • @endcanany
  • @comments
  • @component
  • @endcomponent
  • @slot
  • @endslot
  • @auth
  • @elseauth
  • @endauth
  • @guest
  • @elseguest
  • @endguest
  • @hassection
  • @if
  • @unless
  • @elseif
  • @else
  • @endif
  • @endunless
  • @isset
  • @endisset
  • @switch
  • @case
  • @default
  • @endswitch
  • @echos
  • @rawechos
  • @regularechos
  • @escapedechos
  • @csrf
  • @dd
  • @dump
  • @method
  • @each
  • @include
  • @includeif
  • @includewhen
  • @includefirst
  • @inject
  • @json
  • @extends
  • @section
  • @parent
  • @yield
  • @show
  • @append
  • @overwrite
  • @stop
  • @endsection
  • @forelse
  • @empty
  • @endforelse
  • @endempty
  • @for
  • @foreach
  • @break
  • @continue
  • @endfor
  • @endforeach
  • @while
  • @endwhile
  • @php
  • @unset
  • @stack
  • @push
  • @endpush
  • @prepend
  • @endprepend
  • @lang
  • @endlang
  • @choice

抽出方法

where do I get all Blade built-in directives? に書かれている通り、Illuminate/View/Compilers/BladeCompiler.php および Illuminate/View/Compilers/Concerns/CompilesXXXX.php でディレクティブは定義されている。

vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php で、どのファイルを読み込むかが記述させている。

1
2
3
4
5
6
7
8
9
10
11
<?php

namespace Illuminate\View\Compilers;
...
class BladeCompiler extends Compiler implements CompilerInterface
{
use Concerns\CompilesAuthorizations,
Concerns\CompilesComments,
...
Concerns\CompilesTranslations;
...

で、各ディレクティブの内容自体は Illuminate/View/Compilers/Concerns/CompilesXXXX.php に定義。

vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesLoops.php の一部を抜粋。

@for (xxx) は ` として変換、出力するようになっている。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php

namespace Illuminate\View\Compilers\Concerns;

trait CompilesLoops
{
...
/**
* Compile the for statements into valid PHP.
*
* @param string $expression
* @return string
*/
protected function compileFor($expression)
{
return "<?php for{$expression}: ?>";
}
...

というわけで Illuminate/View/Compilers/Concerns/compileXxxx を抽出すれば、それが利用可能なディレクティブということになる(はず)。

grep, awk, sed で抽出。
※OS によってコマンドの挙動やオプションなどの違いにより下記コマンドそのままだと上手くいかないかも。

1
2
3
4
5
6
7
$ \grep -i 'function compile' vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/* \
| awk '{print tolower($4)}' \
| sed -e 's/compile/@/g' -e 's/(.*//g'
@can
@cannot
@canany
...

抽出結果は前の項で書いた通り。

まとめ

  • Illuminate/View/Compilers/Concerns/ を調べる
    • grep, awk, sed あたりを使うと OK

参考文献

関連記事