【发布时间】:2012-06-22 22:23:54
【问题描述】:
我想做的是这样的:
{myfunc myattribute=new MyClass('arg1', 'arg2')}
但是当我尝试时它给了我一个错误,说函数 MyClass 没有定义。
我一直在使用的解决方法是创建一个像这样的顶级函数:
function MyClass($arg1, $arg2) { return new MyClass($arg1, $arg2); }
然后在模板中做:
{myfunc myattribute=MyClass('arg1', 'arg2')}
但是有没有办法避免为每个我想从 Smarty 对比的类创建一个新的顶级函数?
我想我也可以创建一个只使用类名的函数来让我构造任何类,但这是一种丑陋的解决方案。
编辑: 对于每个告诉我违反最佳做法的人,也许这会让你感觉更好:
我正在构建的对象是一个用于呈现一些 html 的小部件。实际代码如下:
{render_widget widget=new MyWidget() id="myid" name="myname"}
另外,不幸的是,我目前被困在 PHP 5.2 上,所以我不能使用闭包。我可以使用最新版本的 Smarty3,虽然我目前使用的是 Smarty 3.0 版本。
【问题讨论】:
-
所以你想在 smarty 中创建一个类?你一定做错了什么。 Smarty 应该只保存 html(当然还有 smarty 变量)。除了极少数例外。你知道你可以将一个对象传递给 smarty 并在那里使用它吗?还是我看错了问题?