検索

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構造を実施することがますます価値が高まっていることを発見しました。テンプレートエンジンは、ビューをコントローラーから効果的に分離する方法として作成されています。

このタスクを達成するために、テンプレートエンジンには通常、次の機能があります。

  1. エンジンは、ビジネスロジックの機能を故意に弱めます。たとえば、開発者がデータベースクエリを実行する場合、コントローラーでそのクエリを実行してからテンプレートに渡す必要があります。テンプレート内のHTMLを照会することは不可能です。
  2. エンジンは、舞台裏で一般的なセキュリティリスクを処理します。通常、テンプレートは、開発者がユーザー入力を検証してテンプレートに直接渡すことに失敗した場合でも、危険な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 サイトの他の関連記事を参照してください。

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

この投稿では、Blackle Moriは、CohostのHTMLサポートの限界を押し広げようとしている間に見つかったハックのいくつかを示します。あえてこれらを使用してください、あなたもCSS犯罪者とラベル付けされないようにしてください。

カーソルの次のレベルCSSスタイリングカーソルの次のレベルCSSスタイリングApr 23, 2025 am 11:04 AM

CSSを備えたカスタムカーソルは素晴らしいですが、JavaScriptを使用して次のレベルに物事を引き出すことができます。 JavaScriptを使用して、カーソル状態間で移行し、カーソル内に動的テキストを配置し、複雑なアニメーションを適用し、フィルターを適用できます。

Worlds Collide:スタイルクエリを使用したキーフレーム衝突検出Worlds Collide:スタイルクエリを使用したキーフレーム衝突検出Apr 23, 2025 am 10:42 AM

2025年には、互いに互いに跳ね返る要素を伴うインタラクティブなCSSアニメーションは、CSSにPongを実装する必要はありませんが、CSSの柔軟性とパワーの増加はLee&#039;の疑いを補強します。

UI効果にCSSバックドロップフィルターを使用しますUI効果にCSSバックドロップフィルターを使用しますApr 23, 2025 am 10:20 AM

CSSバックドロップフィルタープロパティを使用してユーザーインターフェイスをスタイルするためのヒントとコツ。バックドロップフィルターを複数の要素間でレイヤー化する方法を学び、それらを他のCSSグラフィカル効果と統合して、精巧なデザインを作成します。

微笑んでいますか?微笑んでいますか?Apr 23, 2025 am 09:57 AM

まあ、SVG&#039;の組み込みのアニメーション機能は、計画どおりに非推奨されることはありませんでした。確かに、CSSとJavaScriptは負荷を運ぶことができる以上のものですが、以前のようにSmilが水中で死んでいないことを知っておくのは良いことです

「かわいい」は見る人の目にあります「かわいい」は見る人の目にありますApr 23, 2025 am 09:40 AM

イェーイ、テキストワラップのジャンプを見てみましょう:サファリテクノロジーのプレビューにかなり着陸してください!しかし、それがChromiumブラウザーでの仕組みとは異なることに注意してください。

CSS-Tricks XLIIIを記録しますCSS-Tricks XLIIIを記録しますApr 23, 2025 am 09:35 AM

このCSS-Tricksアップデートは、アルマナック、最近のポッドキャスト出演、新しいCSSカウンターガイド、および貴重なコンテンツを提供するいくつかの新しい著者の追加の大幅な進歩を強調しています。

Tailwind&#039;の@Apply機能は、響きよりも優れていますTailwind&#039;の@Apply機能は、響きよりも優れていますApr 23, 2025 am 09:23 AM

ほとんどの場合、人々はTailwind&#039;の@Apply機能を紹介します。このように展示されたとき、@Applyはまったく有望な音をしません。だからobvio

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、