PHPを使用した開発プロセス中に、テンプレートエンジンは便利なビューレンダリング方法を提供し、フロントエンドとバックエンドを分離し、コードの保守性を向上させるのに役立ちます。ただし、 CEIL()などのテンプレートファイルでPHP関数を直接呼び出すことがあり、ページレンダリングエラーが発生します。なぜこれがなぜですか?この記事では、この問題をいくつかの観点から分析し、対応するソリューションを提供します。
Smarty、Twig、Bladeなどのほとんどのテンプレートエンジンは、テンプレートのビジネスロジックを最小限に抑えるように設計されています。通常、テンプレート内の特定の関数またはカスタムテンプレート関数への呼び出しを制限し、テンプレートが複雑で維持が困難にならないようにすることを目的としています。
Smartyを例にとると、一部のPHP関数がデフォルトで呼び出されることのみが可能です。テンプレートに直接書き込む場合:
{$value = ceil($number)}
ceil()はSmartyのサポート機能が組み込まれていないため、エラーが報告される可能性があります。
テンプレートのセキュリティを確保するために、テンプレートエンジンは、多くの場合、PHPコードの直接実行または一部の機能をサンドボックスすることを制限します。 Template Engineのホワイトリストではない場合は、 Ceil()などの組み込み関数を使用して、パーサーはそれを認識せず、故障をレンダリングします。
たとえば、これを書く場合は、一部のテンプレートで
<code>
<?php echo ceil(3.7); ?>
</code>
テンプレートエンジンの解析中、テンプレートエンジンがプレーンテキストとして扱う可能性があるため、このコードは正しく実行されない場合があります。
複雑なPHP関数をテンプレートで直接呼び出すことを避けることがベストプラクティスです。それを行う正しい方法は次のとおりです。
データは、数値でceil()操作を実行するなど、最初にコントローラーまたはビジネスロジックレイヤーで処理されます。
処理されたデータをテンプレートに渡します。
テンプレートは、論理計算の表示と削減のみを担当します。
例:
<?php
// コントローラーレイヤー
$number = 3.7;
$roundedNumber = ceil($number);
include 'template.php';
テンプレートファイルTemplate.phpには、単純な出力のみが必要です。
<code>
<?php echo $roundedNumber; ?>
</code>
これにより、明確なコードが保証されるだけでなく、テンプレートレンダリングのエラーも回避されます。
テンプレートでCEIL()を使用する必要がある場合は、テンプレートエンジンが関数の呼び出しをサポートするか、カスタム関数を拡張および登録して実装することを確認する必要があります。
Smartyを例にとると、プラグイン機能を登録できます。
<?php
$smarty->registerPlugin('function', 'ceil', function ($params) {
return ceil($params['value']);
});
テンプレートで呼び出されます:
<code>
{ceil value=$number}
</code>
これは、テンプレートエンジンの仕様に準拠するだけでなく、エラーのレンダリングも回避します。
特定のニーズを満たすためにテンプレートにURLを出力する必要がある場合は、URLのドメイン名をM66.netに置き換え、PHPを使用して文字列を処理できます。