Blade は PHP フレームワークである Laravel に標準で搭載されているテンプレートです。その特徴の一つとして自由度があります。Blade はテンプレート内でも PHP で好きに処理を書けます。テンプレート内にロジックが混じる危険性こそありますが、代わりにそのテンプレート限定でしか使わない表示用の処理をテンプレート側に持たせることもできます。この性質上 React や Vue.js の様に関連した処理とテンプレートとスタイルをまとめたコンポーネントファイルを作ることもできます。この様に Blade は便利であり、Laravel 関係なく平の PHP で使いたい時もあります。そういった際に便利なライブラリが BladeOne です。
BladeOne は題の通り、Blade を扱うためのライブラリです。具体的には次の様にして Blade テンプレートを読み込み、文字列として返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $bladeOne = new \eftec\bladeone\BladeOne( __DIR__. '/view_src/' , // Blade テンプレートが置いてあるディレクトリ。ここをルートとして個々の Blade ファイルを指定します。 __DIR__. '/view_dist/' , // コンパイル結果の出力先。Blade を素の PHP に解釈したキャッシュファイルがこのディレクトリ以下に置かれます。 // 実行モード。以下の4種類があります。キャッシュファイルをどう置き換えるかを定義します // MODE_AUTO: コンパイルされたファイルが変更されたかどうかを読み取ります。変更されている場合は、ファイルが置き換えられます // MODE_SLOW: コンパイルされたファイルは常に置き換えられます。遅いのですが、開発には便利です。 // MODE_FAST: コンパイルされたファイルを置き換えません。一度生成したらそれっきりです。高速に動作するため、実運用に適しています。 // MODE_DEBUG: 常にコンパイルされ、ファイル名が特定できるようになります。開発時に使うなら MODE_SLOW よりこちらがおすすめです。 \eftec\bladeone\BladeOne::MODE_DEBUG ); /** @var string $html テンプレートファイルを元に作られた文字列 */ $html = $bladeOne ->run( 'new_entry_pdf_template' , // テンプレートファイルのある場所の指定。↑で指定したディレクトリがルートになります [ 'name' => '浜松太郎' ] // テンプレートファイルに渡すパラメータ ); |
細かい制御などは BladeOne のリポジトリを参照した方が速いですが、おおむねこのインスタンス化、パス指定、コンパイルの流れで過不足なく Blade を使って文字列を生成できます。
PHP からデータを渡して生成したHTMLをブラウザ上に表示させるというのは XSS 脆弱性の起点になりやすいです。特に素で作っていた場合、エスケープ漏れが起きやすく、問題を引き起こしやすいです。Blade に限った話ではないのですが、何がしかテンプレートを書くと自然に安全なプログラムになる仕組みを入れた状態で開発をするべきです。また文字数やよくある制御のエイリアスなどから生産性の面からもテンプレートエンジンは素の PHP に比べて優位です。積極的に活用しましょう。