3

Smarty テンプレート ファイル内で PHP を使用することは、以前のバージョンの Smarty では可能でしたが、現在は推奨されていません。

ただし、下位互換性ラッパーを使用することで引き続き実行できます。

これにより、次のようにして、テンプレート ファイル内から PHP を使用できるようになります。

{php}echo "Hello World";{/php}

これが引き起こす可能性のある問題や問題を知っている人はいますか?

4

1 に答える 1

2

すでに与えられたコメントを完全な回答に拡張するために、任意の PHP コードを埋め込むことの問題は、PHP と Smarty の間の分離を壊すことです。

Smarty は直接 PHP にコンパイルされるため、Smarty で記述したものはすべて純粋な PHP で記述できます。

  • <?= $foo ?>{$foo}大丈夫です
  • <?php if ( $expr ): ?> Hello <?php endif; ?>あまりにも{if $expr} Hello {/if}悪くないから
  • しかし、目<?= htmlspecialchars(strtoupper($foo ?: 'Hello')); ?>{$foo|default:'Hello'|upper|escape:html}は少し難しいです

Smarty を使用することの主な利点 (これらはすべて、使用すると基本的に無効になります{php}):

  • 明らかな分離 - Smarty にあるため、特定のファイルがテンプレートと見なされることは常に明らかです。逆に、結果をテンプレートに渡す必要があるため、PHP 関数内で直接出力するのが間違っていることは常に明らかです。
  • 強制分離 - データベース接続や入力検証などのアプリケーション ロジックは、これらの関数を Smarty テンプレートから呼び出すことを許可しない場合、View レイヤーに「漏れる」ことはありません。
  • セキュリティ - 信頼されていないフロントエンド開発者 / デザイナーに Smarty テンプレートへのアクセスを許可し、彼らがアクセスできるデータと機能を厳密に制御できます。

Smarty と PHP を混在させた場合に得られる唯一の利点は、上で示した修飾子の例のように、Smarty 構文の部分が PHP の同等のものよりも読みやすいことです。

于 2013-02-16T21:05:09.477 に答える