PHPはテンプレートのA-OKです
PHPテンプレートエンジンは、品質の低いコードの作成が容易であると批判されていることがよくありますが、これは必ずしも真実ではありません。 PHPプロジェクトが、専用のテンプレートエンジンに依存することなく、基本的なモデルビューコントローラー(MVC)構造をどのように実施するかを見てみましょう。
まず、PHPの歴史の簡単なレビュー
HTMLテンプレートツールとしてのPHPの歴史には、ひねりとターンに満ちています。
HTMLテンプレートに使用される最も初期のプログラミング言語の1つはCでしたが、使用するのは面倒であり、このタスクには適していないことがわかりました。
Rasmus Lerdorfはこれを念頭に置いてPHPを作成しました。彼は、Cを使用してバックエンドビジネスロジックを処理することに反対しているわけではありませんが、Frontend Dynamic HTMLを生成するためのより良い方法を望んでいます。 PHPはもともとテンプレート言語として設計されていましたが、時間が経つにつれてより多くの機能を採用し、最終的にはスタンドアロンの完全なプログラミング言語になりました。
プログラミングモードとHTMLモードを切り替えるPHPのユニークな機能は非常に便利であると考えられていますが、プログラマーが維持が難しいコードを簡単に記述できるようになります。これは、ビジネスロジックとテンプレートロジックをミックスするコードです。 PHPファイルは、いくつかのHTMLテンプレートで開始され、警告なしに突然高度なSQLクエリに侵入します。この構造は、HTMLテンプレートの読み取りと再利用が困難です。
時間が経つにつれて、Web開発コミュニティは、PHPプロジェクトの厳格なMVC構造を実施することがますます価値が高まっていることを発見しました。テンプレートエンジンは、ビューをコントローラーから効果的に分離する方法として作成されています。
このタスクを達成するために、テンプレートエンジンには通常、次の機能があります。
- エンジンは、ビジネスロジックの機能を故意に弱めます。たとえば、開発者がデータベースクエリを実行する場合、コントローラーでそのクエリを実行してからテンプレートに渡す必要があります。テンプレート内のHTMLを照会することは不可能です。
- エンジンは、舞台裏で一般的なセキュリティリスクを処理します。通常、テンプレートは、開発者がユーザー入力を検証してテンプレートに直接渡すことに失敗した場合でも、危険なHTMLを自動的に免除します。
テンプレートエンジンは、多くのWebテクノロジースタックの主要な機能になりました。彼らはよりメンテナンスしやすく、より安全なコードベースを作成するので、驚くことではありません。
ただし、純粋なPHPを使用してHTMLテンプレートを処理することもできます。いくつかの理由でこれを行うことができます。たぶん、あなたはレガシープロジェクトに取り組んでおり、追加の依存関係を導入したくないか、非常に小さなプロジェクトに取り組んでおり、軽量に保つことを好むでしょう。または、この決定はあなた次第ではありません。
PHPテンプレートのユースケース
純粋なPHPテンプレートをよく実装することの1つは、WordPressです。これは、デフォルトで厳格なMVC構造を強制しません。完全なテンプレートエンジンを導入するには少し面倒ですが、ビジネスロジックをテンプレートから分離し、自分の意見を再利用可能にしたいと思っています。
あなたの推論が何であれ、純粋なPHPを使用してHTMLテンプレートを定義することが好まれることがあります。この記事では、これをより専門的な方法で行う方法について説明します。このアプローチは、PHPテンプレートの悪名高いスパゲッティコードスタイルと、正式なテンプレートエンジンが提供する「ロジックなし許可」アプローチとの実用的なトレードオフを表しています。
基本的なテンプレートシステムを実践する方法の例に深く掘り下げましょう。繰り返しますが、例としてWordPressを使用しますが、これは純粋なPHP環境または他の多くの環境に置き換えることができます。読み続けるためにWordPressに精通する必要はありません。
目標は、コンポーネントへの見解を分割し、ビジネスロジックとHTMLテンプレートを明確に区別することです。具体的には、カードグリッドを表示するビューを作成します。各カードには、最近の記事のタイトル、要約、著者が表示されます。
ステップ1:データを提示するデータを取得します
最初のステップは、ビューに表示するデータを取得することです。これには、SQLクエリの実行またはFramework/CMSのORMまたはヘルパー関数を使用してデータベースへの間接アクセスが含まれます。また、HTTPリクエストを外部APIに作成したり、フォームまたはクエリ文字列からユーザー入力を収集したりすることもできます。
この例では、WordPressのget_posts
ヘルパー関数を使用して、ホームページにいくつかの投稿を表示します。
3 ]);
これで、カードグリッドに表示したいデータにアクセスできますが、ビューに渡す前に追加の作業を行う必要があります。
ステップ2:テンプレートデータを準備します
get_posts
関数は、wp_postオブジェクトの配列を返します。各オブジェクトには記事のタイトル、要約、および著者情報が含まれていますが、プロジェクトの他のカードに他のタイプのデータを表示する可能性があるため、wp_postオブジェクトタイプにビューを関連付けたくありません。
代わりに、各記事オブジェクトをニュートラルデータ型(連想配列など)に積極的に変換することは理にかなっています。
3 ]); $ cards = array_map(function($ wp_post){ 戻る [ 「見出し」=> $ wp_post-> post_title、 'body' => $ wp_post-> post_excerpt、 'footing' => get_author_name($ wp_post-> post_author) ]; }、$ wp_posts);
この場合、各wp_postオブジェクトは、 array_map
関数を使用して連想配列に変換されます。各値のキーは、タイトル、抜粋、著者ではなく、見出し、ボディ、フーティングのより一般的な名前が与えられていることに注意してください。これは、カードメッシュコンポーネントが記事だけでなく、あらゆるタイプのデータをサポートするように設計されているためです。たとえば、参照と顧客名を含む推奨グリッドを表示するために簡単に使用できます。
データの準備ができたら、 render_view
関数に渡すことができます。
$カード ]);
もちろん、 render_view
関数はまだ存在しません。定義しましょう。
ステップ3:レンダリング関数を作成します
// functions.phpまたはグローバルに利用できる他の場所で定義します。 //グローバルネームスペースで競合の可能性を心配している場合は、 //この関数を名前空間クラスの静的方法として定義できますrender_view($ view、$ data) { 抽出($ data); require( 'Views/'。$ view。 '.php'); }
この関数は、レンダリングされるビューの名前と、表示されるデータを表す関連配列を受け入れます。 extract
関数は、連想配列内の各アイテムを取得し、その変数を作成します。この例では、index.phpで準備したアイテムを含む$cards
と呼ばれる変数があります。
ビューは独自の機能で実行されるため、独自の範囲があります。これは、競合を心配することなく単純な変数名を使用できるため、良いことです。
関数の2行目は、渡された名前に一致するビューを印刷します。この場合、 views/cards_grid.php
のビューを探します。先に進み、ファイルを作成しましょう。
ステップ4:テンプレートを作成します
このテンプレートは、抽出したばかりの$cards
変数を使用して、それを順序のないリストとしてレンダリングします。配列内の各カードについて、テンプレートはサブビューをレンダリングします:単一のカードビュー。
単一のカードを備えたテンプレートは、単一のカードを直接レンダリングする柔軟性を提供するか、プロジェクトの他の場所で別のビューで使用する柔軟性を提供するため有用です。
基本的なカードビューを定義しましょう。
<div> <h4></h4> <p></p> </div>
レンダリング関数に渡された$card
には、見出し、ボディ、および足場用のキーが含まれているため、同じ名前の変数をテンプレートで使用できるようになりました。
この例では、データがXSS危険ではないことをかなり確実にすることができますが、このビューを後でユーザー入力で使用する可能性があるため、各値をhtmlspecialchars
に渡すことは賢明です。スクリプトタグがデータに存在する場合、安全に逃げられます。
一般に、各変数にレンダリング前に非ヌル値が含まれているかどうかを確認すると役立ちます。これにより、タグに空のHTMLタグを残さずに変数を省略できます。
PHPテンプレートエンジンは優れていますが、PHPを使用して元の設計目的を達成することが適切な場合があります。動的HTMLを生成します。
PHPのテンプレート化は、維持が困難なスパゲッティスタイルのコードを引き起こす必要はありません。少し予見可能な視聴を使用すると、ビューとコントローラーを互いに分離する基本的なMVCシステムを実装できます。これは、驚くほど少量のコードで実行できます。
以上がPHPはテンプレートのA-OKですの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











それは&#039; Vueチームにそれを成し遂げてくれておめでとうございます。それは大規模な努力であり、長い時間がかかったことを知っています。すべての新しいドキュメントも同様です。

私はこの非常に正当な質問で誰かに書いてもらいました。 Leaは、ブラウザから有効なCSSプロパティ自体を取得する方法についてブログを書いています。それはこのようなものです。

先日、Corey Ginnivanのウェブサイトから、この特に素敵なビットを見つけました。そこでは、スクロール中にカードのコレクションが互いに積み重ねられていました。

WordPressエディターでユーザーに直接ドキュメントを表示する必要がある場合、それを行うための最良の方法は何ですか?

これらのデスクトップアプリがいくつかあり、目標があなたのサイトをさまざまな次元ですべて同時に表示しています。たとえば、書くことができます

フレックスレイアウトの紫色のスラッシュ領域に関する質問フレックスレイアウトを使用すると、開発者ツールなどの混乱する現象に遭遇する可能性があります(D ...

CSS Gridは、レイアウトをこれまで以上に簡単にするように設計されたプロパティのコレクションです。何でもするように、少し学習曲線がありますが、グリッドは
