ホームページ > バックエンド開発 > PHPチュートリアル > Laravelフレームワークのカスタムテンプレートディレクティブの概要

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

jacklove
リリース: 2023-04-02 15:54:02
オリジナル
1562 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート