3

在 Smarty 的早期版本中可以在 Smarty 模板文件中使用 PHP,但现在已弃用。

但是,您仍然可以通过使用向后兼容性包装器来做到这一点。

这使得在模板文件中使用 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; ?>for{if $expr} Hello {/if}也不错
  • 但是<?= htmlspecialchars(strtoupper($foo ?: 'Hello')); ?>对于{$foo|default:'Hello'|upper|escape:html}眼睛来说有点难

我看到使用 Smarty 的主要优点(如果使用,所有这些基本上都无效{php}):

  • 明显的分离 - 给定文件被视为模板总是很清楚,因为它在 Smarty 中。相反,直接在 PHP 函数中输出是错误的总是很清楚的,因为结果应该被传递给模板。
  • 强制分离 - 如果您不允许从 Smarty 模板调用这些函数,则应用程序逻辑(如数据库连接或输入验证)不能“泄漏”到您的视图层
  • 安全性——您可以让不受信任的前端开发人员/设计人员访问 Smarty 模板,并严格控制他们有权访问的数据和功能。

如果将 Smarty 和 PHP 混合使用,您将保留的唯一好处是 Smarty 语法的那些部分,它们比它们的 PHP 等价物更具可读性,就像我在上面展示的修饰符示例一样。

于 2013-02-16T21:05:09.477 回答