php - 在 Smarty 模板文件中使用 PHP

标签 php smarty

<分区>

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

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

这使得通过以下操作可以从模板文件中使用 PHP:

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

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

最佳答案

为了将已经给出的评论扩展为完整答案,嵌入任意 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 等价物更具可读性,就像我上面展示的修饰符示例。

关于php - 在 Smarty 模板文件中使用 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14877736/

相关文章:

php - 如果未设置变量,则使用函数初始化变量 - PHP

php - 如何从 Prestashop 数据库中获取特定产品

聪明的while循环错误

javascript - 如何在数据生命引擎中显示某些类别的div?

php - 无法在弹出模式窗口中显示 sql 结果

php - 计算表格中的前 10 个输入

php - 在 PDO 中使用 where 选择使用 php mysql

php - 逐行读取文件的更快方法?

php - 添加 jquery 时,即使使用文字标签,tpl 文件也不起作用

javascript - 通过单击复选框启动 smarty 函数