根据指定的标志调整智能模板的方法

时间:2013-09-21 12:03:41

标签: php smarty smarty3

我正在开发一个小应用程序来管理数据库中的一些数据。我正在使用Smarty模板引擎让一切都以MVC风格工作,并尝试尽可能保持代码清洁和结构化,PHP脚本充当控制器,智能模板作为视图。

现在我想介绍一下权限的概念。例如,一个用户可以拥有查看和编辑某些数据的权限,而另一个用户可以拥有其他权限来查看或编辑相同数据的不同部分。

我正在2个地方进行检查: 1.控制器本身,在执行操作之前检查用户是否拥有权限。 2.视图(智能模板),用于检查用户是否具有权限,并禁用或更改以仅读取相应的控件。

然而,后一部分对我的喜好变得有点过于冗长。

<textarea id="description" name="description" rows="3" 
{if !$user->can(Permissions::EDIT_DESCRIPTION)}readonly{/if}>{$item['description']|default:''}</textarea>     

对于使用Smarty实现相同结果的声明或简洁,有没有更好的方法?

1 个答案:

答案 0 :(得分:1)

如何将整个$user及其方法和常量泄漏到Smarty中,制作一个或多个自定义修饰符来检查权限并根据它执行一些有用的操作,例如:

一个check_access修饰符,左边是访问类型(第一个参数),右边是真假输出(第二个和第三个参数):

<textarea id="description" name="description" rows="3" {'EDIT_DESCRIPTION'|check_access:'':'readonly'}>{$item['description']|default:''}</textarea>

或者甚至更具体,如果有必要,输出readonly属性;我不能想到一个好名字:

<textarea id="description" name="description" rows="3" {'EDIT_DESCRIPTION'|readonly_if_no_access}>{$item['description']|default:''}</textarea>