Zend Framework中的小部件 - 它们应该去哪里?

bal*_*ton 3 wordpress zend-framework widget

我一直在使用Zend Framework(使用Doctrine作为ORM)已经有一段时间了,并用它完成了一些项目.

在一些即将推出的项目中,我需要类似于Wordpress如何做的小部件.你有一个帖子/页面,看起来像:

Subscribe to my newsletter:
[subscribe/]

View my events
[events limit=5 sort=date/]

View this page's comments
[comments/]
Run Code Online (Sandbox Code Playgroud)

其中说订阅小部件将被Blog :: subscribeWidget替换,并且事件可以用Events :: eventsWidget等替换.

现在它已经在过去的几个星期里对我如何做到这一点做了我的头?我想出了以下几个选项:

  1. 我可以将小部件放在控制器中,然后像操作一样调用它们.这里的问题是代码可能在控制器之间飞行,我已经读过,由于调度量很大,这很昂贵.

  2. 我可以将小部件放置为视图助手.所以在视图中我可以使用$ this-> renderPage($ Page),然后它会参与所有小部件.这里的问题是如果小部件需要做一些业务逻辑,例如发布一个新的注释,那真的不应该在视图中,应该怎么办?

  3. 另一种选择是在模型中放置小部件?但那么他们究竟如何渲染内容以供展示呢?

额外的并发症来自:

  1. 假设评论小部件也会处理发布,删除评论等.

  2. 比如事件列表,如果我想对下一页事件做一个ajax请求,使用方法#2(查看帮助器)这将如何工作?

Ric*_*ner 5

如果我理解你的正确,你的小部件将需要他们自己的动作控制器,这是他们获取数据的逻辑,解析表单提交等应该去.在这种情况下,窗口小部件和页面之间的区别在于它是如何呈现的,即作为HTML片段而不是整个页面; 您可以使用Action View Helper来实现此目的.

如果您的窗口小部件包含表单,则应该使用AJAX将表单数据提交回服务器,这样使用窗口小部件不会导致用户意外地离开页面.您可以通过在窗口小部件的视图和/或操作中使用头脚本助手,将所需的JavaScript注入到已包含窗口小部件的页面中.