在即将到来的几个项目中,我需要类似WordPress小部件的功能。您可以拥有一个帖子/页面,看起来像这样:
Subscribe to my newsletter:
[subscribe/]
View my events
[events limit=5 sort=date/]
View this page's comments
[comments/]
在这里,订阅小部件将被替换为Blog::subscribeWidget,并且事件可以替换为Events::eventsWidget等。
过去几周,我一直在想如何做到这一点?我想出了以下几个选项:
我可以将小部件放在控制器中,然后像操作一样调用它们。问题在于代码可能会在控制器之间飞来飞去,据我所读,由于分派的数量很多,这是昂贵的。
我可以将小部件作为视图助手放置。因此,在视图中,我可以有$this->renderPage($Page),然后处理所有小部件。问题在于如果小部件需要执行一些业务逻辑(例如发布新评论),那么这真的不应该在视图中吗?
另一个选择是将小部件放在模型中?但是它们如何呈现要显示的内容呢?
当出现以下情况时,会有额外的复杂性:
例如,评论小部件还将处理评论的发布、删除等。
例如,在事件列表中,如果我想使用方法#2(视图助手)对下一页事件进行ajax请求,这该怎么办?