在Smarty模板文件中使用PHP

时间:2013-02-14 15:03:11

标签: php smarty

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

但是,您仍然可以使用向后兼容包装器来完成此操作。

这样可以通过以下方式在模板文件中使用PHP:

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

有没有人知道这可能导致的任何问题或问题?

1 个答案:

答案 0 :(得分:1)

要将已经给出的注释扩展为完整的答案,嵌入任意PHP代码的问题在于它打破了PHP和Smarty之间的分离。

由于Smarty直接编译为PHP,因此您在Smarty 中编写的所有内容都可以用纯PHP编写,并且可能会或者可能不会以可读的方式编写,例如。

  • <?= $foo ?> {$foo}很好
  • <?php if ( $expr ): ?> Hello <?php endif; ?> {if $expr} Hello {/if}也不错
  • <?= htmlspecialchars(strtoupper($foo ?: 'Hello')); ?>的{​​{1}}眼睛有点难以理解

我看到使用Smarty的主要优点(如果使用{$foo|default:'Hello'|upper|escape:html},所有这些优点基本上无效):

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

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