web-dev-qa-db-ja.com

PHP vsテンプレートエンジン

現在、テンプレートエンジンとしてのPHPとPHP上のテンプレートエンジンとの間の選択についての議論を行っています。

あなたの選択とその理由は何ですか?

PHPがテンプレートエンジンそのものである場合に、別のテンプレートエンジンを使用する理由を説明します。

60
Ikke

テンプレートエンジンの場合:

  1. エンドユーザーのカスタマイズにセキュリティを追加しました。 pure PHPのテーマには、ユーザーとそのインストールに害を及ぼす制約のない能力があります。したがって、テンプレートエンジンは、適切な場合はそのリスクを取り除きます。
  2. グラフィックアーティストやWebデザイナーなどの非プログラマーにとっての使いやすさ。

Plain-phpの場合:

  1. Pure PHP=の速度は、その上に構築されたどのテンプレートエンジンとも一致しません。
  2. full power of PHPは、解釈またはフィルタリングされた部分だけでなく、出力で使用できます。

私はPHP可能であればそれ自体を好みます。そして、ほとんどの人はカスタムテーマを作成してソフトウェアをハックしたくないので、大まかに読んでそのセキュリティを調べるのは簡単です。 、私はテンプレート作成とプログラミングの両方を行い、グラフィックアートを行う「間」であり、私のスキルセットは厳格なプログラマーや厳格なアーティスト/デザイナーとは異なります。

48
Robert K

Smartyを導入したとき、Webデザイナーがsmarty変数を使用してHTMLを作成できるようにすることは非常に簡単でした。プログラミングチームのメンバーは、より多くのバックエンド作業、つまりSmarty変数のコンテンツの作成に集中しています。

これにより、開発ライフサイクルが短縮され、作業をより多くの人々に分割できるようになり、最終的には設計の改善につながりました。

38
stuart

まあ、それは私の意見ですが、テンプレートエンジンはひどいです。最初にテンプレートエンジンの実装方法を理解し、次にその使用方法を学習する必要があります。 PHPが単独で最適に機能し、はるかに柔軟性が高いため、無駄な時間のようです。

24
rogeriopvl

次の理由が適用されます。

  • エンジンを使用してアプリケーションをテンプレートに分離すると、アプリケーションはコードエラーの停止に対して脆弱になりません。
  • 名前空間はアプリケーションに直接組み込まれないため、テンプレートを使用すると、リファクタリング時に将来の柔軟性が向上します。
  • テンプレートを使用すると、開発者はビジネスロジックとコードをプレゼンテーションレイヤーの外に保つことができます(強制されます)。
  • テンプレートを使用すると、データセットをモックアップしてテンプレートエンジンに渡し、サイトがデータでどのように見えるかをプレビューすることが簡単になります
14
cgp

テンプレートエンジンを使用すると、非プログラマがテンプレートを実行している場合に役立ちます。多くの場合、単純化されたテンプレート言語は、プログラマでない人にとってPHP自体よりも簡単です。

そうは言っても、私(または私と他の開発者)だけの場合は、テンプレートの使用をやめることになります。

10
Mark Biek

PHP ではないテンプレートエンジンですが、テンプレートまたはテンプレートエンジンの記述に使用できる言語です。テンプレートエンジンは単なる言語ではなく、スクリプトがテンプレートを見つけて整理したり、スクリプトからテンプレートにデータを割り当てたりできるようにするプログラミングAPIでもあります。 Pure PHPはまったく何も提供しません-それは単なる言語です。代わりに、Zend FrameworkのZend_Viewのようなライブラリを比較に使用する必要があります(基本的に、Smartyとまったく同じように機能しますただし、PHPを使用してテンプレートを作成します)。PHPまたはその他のテンプレート言語としてテンプレートエンジンを使用するかどうかを尋ねる必要があります。

言語自体をテンプレート化する場合、テンプレートを作成するには通常のループと条件で十分ですが、この「十分な」ということは、簡単、快適、効率的、または柔軟であることを意味しません。 PHPはテンプレートデザイナーに特別なものを提供しませんが、多くの「テンプレート言語」(Smartyなど)はPHPの限られたサブセットのみを提供するため、プログラマがPHPを選択しても驚くことはありません。彼らは関数を書いてOOPを使用できます。これはこれには大きすぎます(私の意見では)ですが、動作し、本当に役立ちます。

ポイントは、カスタムテンプレート言語はPHPの欠点に制限されないが、設計者は「変数とループを表示するだけで十分である」と主張して、通常はそれを見ないことです。言語のほうがはるかに効果的です。

  • フォームの表示とレンダリング(PHPは、フォームの外観をカスタマイズするための簡単で柔軟で汎用的なシステムを提供するテンプレート言語としてのフレームワークを見たことはありません)。
  • HTML/XMLドキュメント構造の理解。
  • 自動XSSインジェクションフィルター。
  • プレゼンテーションレイヤーのさまざまな一般的な問題を解決する(つまり、ページネーションシステムの外観をカスタマイズする、列にデータを表示するなど)
  • テンプレートの移植性とtrueテンプレートからのアプリケーションロジックと実装の詳細の分離。

この方法に従うテンプレート言語の例については、PHPTALおよびOpen Power Template 2を参照してください。TinyButStrongにも同様のアイデアがありますが、残念ながらこのテンプレートエンジンは非常に低速です。

10
Zyx

テンプレートエンジンとしてのPHPは、HTML構文を混同しても文句を言いません。タグを閉じるのを忘れたり、タグを誤ってネストしたりすることができます。

PHPの出力はデフォルトではエスケープされないため、htmlspecialchars()を厳密に追加することを忘れない限り、サイトにはHTMLインジェクション(XSS)の脆弱性があります。

<p>Hello <?= $name ?></b>
<!-- Simple template full of errors -->

これらの問題は、XHTML 適切に を生成しようとするとさらに悪化します。平易なPHP-もちろんできます-しかし、それはより多くの努力と勤勉を必要とします。

だからこそ、私の推奨事項は [〜#〜] phptal [〜#〜] です。 OPT2 も問題ありません。

6
Kornel

サバントはあなたが探しているものです。 PHP上で新しいテンプレート言語を解釈する代わりに、テンプレートでPHP演算子を使用できるようにする、素敵なラッパークラスです。

長所:

システムに余分な作業を追加しないことは理にかなっています。
開発者向けの学習曲線はありません。皆さんが規律があるなら、これが道です。 (サバント)

短所:

Savantは適切に分離することを推奨していますが、開発者がビジネスロジックを開発コードから分離することを強制するものではありません。決して破られるべきではないルールがあります。テンプレートでのみ変数を出力し、条件とループを使用できます。開発者がテンプレートに変数を作成することを許可しないでください。残念ながら、開発者は何回言っても、これを行うことはないようです。そのため、開発者はビジネスと設計を完全に分離することを余儀なくされるため、Smartyのようなエンジンを使用する価値があります。

自分のために、または多くの開発者がいないプロジェクトを行う場合は、Savantを使用する傾向があります。そのプロジェクトが私よりもはるかに大きい場合、建築ではSmartyのようなものを探します。

いずれにせよ、コードの分離は、SavantまたはSmartyを使用する重要な天気です。他にも良い選択肢があるはずです。

5
Derek Organ

PHPはほとんどのタスクに最適ですが、テンプレートエンジンを使用すると、プロジェクトをより簡単にスケーリングできます。

Smarty または [〜#〜] phptal [〜#〜] のような既製のものは、自分でロールする時間がない(そして必要としない)場合に最適です彼らが提供する以上)。また、より専門的なものが必要な場合は、後から独自の実装でかなり簡単に置換/変更できます。

私は個人的にPHPTALで良い経験をしました。それは主にあなたの邪魔にならず、シンプルだからです。

5
seanhodges

次の記事では、PHP用テンプレートエンジンに関するさまざまな観点を要約しています。

PHP第3種テンプレート http://www.tinybutstrong.com/article_3rd_kind.html

3
Skrol29

PHPで最適に機能しました。コードを適切に分離でき、グラフィックデザイナーは従うべきいくつかの簡単なルールを学ぶことができましたが、ほとんどはHTML/CSS PHPではなく、インターフェイスについて考えることなく、重いコードを書くことができます。

3
acrosman

新しいプロジェクトでの私の選択は、おそらく、別のテンプレートエンジンを使用する代わりに、おそらくMVCフレームワークと組み合わせて、PHPのテンプレート機能を使用することです。結局のところ、コードの単純さや分離のクリーンさのために、{$myVar}または<?= $myVar ?>コード内。 PHPまたはMVCフレームワークによって、条件、ループ、またはキャッシュなどのバックエンドテクノロジなどのより複雑なテンプレート機能も同様に(またはそれ以上)処理できます。

私は両方のアプローチを使用しました(テンプレートエンジンを使用する場合と使用しない場合)が、個人プロジェクトでのみ使用し、チームプロジェクトでは使用しませんでした。

2
Daan

PHPコーディング機能は進化し、設計機能も同じです。そのため、デザイナーと開発者とチームで作業する場合、ジョブを並列化し、デザイナーにHTMLを操作させるテンプレートエンジンが必要です。

私の個人的な選択はRaintplです。なぜなら、ここではベンチマークがあなたを助けることができる軽量で、フレンドリーで速いからです(また、賢くて賢い人もいいです!):

http://www.raintpl.com/PHP-Template-Engines-Speed-Test/

1
RainElemental

PHPはテンプレートエンジンではなく、スクリプト言語です。

1
Toby Allen

VirtueMart、Joomla、またはPHPのテンプレートの概念が原因かどうかはわかりませんが、VirtueMartを独自のグラフィックテーマに合わせるのはPURE HELLです。 (私は単純なCSSスタイルについて話していません。)

1
Yaroukh

PHPでテンプレートエンジンを使用します。ビジネスロジックとプレゼンテーションロジックを高度に分離したいためです。Webプログラミングは、PHP (または他のプログラミング言語)にはHTMLが散在していません。これはMicrosoftのコードビハインドが非常に人気があるためです。

KudzuPHPというテンプレートエンジンを使用します。これは、クラシックASP用のKudzuASPの移植版です。多くのテンプレートエンジンとは異なり、ビジネスルールとロジックをホストするコードは、テンプレートエンジンが呼び出された後、テンプレートエンジンのイベントハンドラーになります。このアプローチにより、PHPコードのコードを変更する必要なく、テンプレートを変更(プレゼンテーションの大きなブロックを移動)することができます。

KudzuPHPには独自のライブラリシステムが含まれており、新しい拡張タグとライブラリの作成は非常に簡単です。

KudzuPHPはここで見つけることができます: http://www.andrewfriedl.com/downloads/ Wordpress Wordpress APIなしPHP上部のWordpress.orgに移動し、プラグインで「Kazoo」を検索します。

0
Andrew

最近、これについてブログ記事を書きました。

セキュリティのためだけに、必ずテンプレートエンジンを使用してください(Twig is secure)。

優れたテンプレートエンジン(Twigなど)は以下を提供します。

  • セキュリティ(最も重要なこと)
  • 冗長ではありません(phpなど)
  • より多くのテンプレート機能
0

現在、最も高速で使いやすいです。 PHPテンプレートエンジンで一連のベンチマークを行った後、twigはネイティブphp言語の直後の2番目になります。

0
skonsoft

スタンドアロンのテンプレートエンジンの学習に時間を費やす必要がある場合は、代わりにフレームワークの学習に時間を費やします。私の選択は、Zend Frameworkを使用することです。これは、MVCアプローチを使用して実装されると、フレームワークの能力と、PHP自体のネイティブテンプレート機能を提供します。

0
PHPexperts.ca

この質問をして以来、私は mustache に出会いました。これは、ロジックのないテンプレート言語です。

したがって、これはPHPまたはsmartyとは異なり、あらゆる種類のロジックをテンプレートに追加する可能性がありますが、ビューモデルのようなものにすべてのロジックを保持する必要があります。

これは、ロジックがまだ可能なテンプレート言語に切り替えるよりも良いオプションのように思えます。

0
Ikke