ホームページ  >  記事  >  バックエンド開発  >  Laravelフレームワークのカスタムテンプレートディレクティブの概要

Laravelフレームワークのカスタムテンプレートディレクティブの概要

jacklove
jackloveオリジナル
2018-07-05 17:54:191548ブラウズ

Blade ではコマンドをカスタマイズすることができ、ディレクティブメソッドを使用してコマンドを登録できます。以下の記事ではLaravelフレームワークのカスタムテンプレート命令に関する関連情報を中心にまとめて紹介していますサンプルコードを交えて詳しく紹介していますので必要な方は参考にしてください。一緒に見ていきましょう。

はじめに
最近 Laravel を勉強しています。Laravel フレームワークでテンプレートを使用する 1 つの方法は、コントローラー レイアウトを使用することです。通常、ビュー テンプレートに記述します。複雑なロジックは煩雑に見えるため、カスタム テンプレート ディレクティブを使用すると、ビュー ロジックを簡素化し、よりエレガントなコードを作成できます。Laravel Blade は、特別な構文を PHP と HTML にコンパイルするテンプレート エンジンです。特殊な構文を備えたディレクティブは、複雑なコードをその背後に隠す、砂糖でコーティングされた関数です。テンプレートには、@foreach/@if/@section/@extends などの多数の組み込み命令が含まれています。単純なプロジェクトを作成するには組み込み命令で十分ですが、コード内で複雑な関数を繰り返し記述する場合は、を選択し、テンプレートをカスタマイズします。 ディレクティブは、ビュー構造の最適化に役立つ場合があります。

以下では特に言うことはありません。詳細な紹介を見てみましょう。

#単純なテンプレート ディレクティブをカスタマイズする


$expression パラメータはオプションです

\Blade::directive('directive_name', function ($expression) {
 return $expression;
});

#viewDemoでの使用

##

<p>@hello(&#39;World&#39;)</p>

#カスタム テンプレート ディレクティブが宣言される場所AppServiceProvider.php

<?php
namespace App\Providers;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
 /**
  * Perform post-registration booting of services.
  *
  * @return void
  */
 public function boot()
 {
  Blade::directive(&#39;hello&#39;, function ($expression) {
   return "<?php echo &#39;Hello &#39; . {$expression}; ?>";
  });
 }
 /**
  * Register bindings in the container.
  *
  * @return void
  */
 public function register()
 {
  //
 }
}

この方法で定義されたディレクティブは正常にロードされ、任意のテンプレートで使用できます

Notes

#最初のポイント

カスタム命令で渡された複数のパラメーターに直接アクセスすることはできません。それらをトラバースする必要があります

<p>@greet(&#39;Hi&#39;, &#39;Hammad&#39;)</p>
\Blade::directive(&#39;hello&#39;, function ($expression) {
 list($greet, $name) = explode(&#39;, &#39;, $expression);

 return "<?php echo {$greet} . &#39; &#39; . {$name}; ?>";
});

array() list() と同様、これは関数ではなく言語構造です

2 番目の点

Be必ず出力をフィルタリングすることを忘れないでください。通常、{{}} を使用する場合、Blade は事前にフィルタリング操作を実行しています。悪意のあるユーザーがサイトに JS コードを挿入するのを防ぐために、HTML をエスケープするには、次の操作を実行する必要があります。 Laravel 独自の関数 e() を使用します。これは htmlentities() と同等です。

#

\Blade::directive(&#39;hello&#39;, function ($expression) {
 return "<?php echo &#39;Hello &#39; . e({$expression}); ?>";
});

#3 番目のポイント

カスタム テンプレート ディレクティブを追加または変更するたびに、最初にキャッシュされたビュー テンプレートを必ずクリアしてください。clear Artisan を使用できます

php artisan view:clear

Laravel5.5 の新機能

#カスタム テンプレート ディレクティブを使用する場合、そのほとんどは何らかの条件形式であり、3 つの独立した命令を登録する必要があります。 if/else/endif、現在 Laravel5.5 はすでに簡素化された条件付き命令をサポートしています。たとえば、次の例では、テンプレートで admin/else/endadmin

public function boot()
{
 \Blade::if(&#39;admin&#39;, function () {
  return auth()->check() && auth()->user()->isAdmin();
 });
}
# を使用できます。

##概要

興味があるかもしれない記事:

PHP のクイック ソートの再帰実装 説明メソッドの例の説明

PHP で git デプロイメントを実装する方法に関する詳細なチュートリアル

バイナリの例の説明と分析PHP で実装された検索アルゴリズム


#

以上がLaravelフレームワークのカスタムテンプレートディレクティブの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。