我正在构建一个我希望用作“标签式浏览”功能的界面。这些选项卡中的每一个都已编写为操作,选项卡式界面可作为各个选项卡的链接。我决定尝试为这个控制器编写“索引”页面 - 将所有选项卡的内容放入隐藏的div并使用jQuery在它们之间交换,但是一旦我开始使用动作视图助手 - 我遇到了很多人说这是不好的做法。 (see this article)
其中一些操作会构建表单 - 从模型中获取一些数据等以显示。我希望每个动作都能继续自行运行(也有一些解析形式)。
浏览/ item应该为您提供选项卡式菜单,以及隐藏标记中所有div的内容 - 其中/ item / tab2是特定操作(例如表单提交)。
另一个复杂/警告 - 如果用户无权访问该“标签”,某些操作将抛出访问异常。我不想两次将访问检查构建到系统中(因此显示一个包含空内容的选项卡)。
我只是想弄清楚处理这类事情的最佳做法是什么,我认为动作助手可能就是这样。如果我尝试使用View Helpers - 我开始想知道这是否是组装Zend_Form的正确位置。
有没有人对“不使用Zend_View_Helper_Action
的”正确“方法有任何建议?
答案 0 :(得分:7)
正如我在你引用的文章中所说,解决动作视图助手的正确方法是创建直接访问模型以获取所需数据的部分。这可以通过一个视图助手(你自己做这个;))如果这会在你的视图中涉及很多逻辑。
动作视图助手不仅仅受到性能问题的困扰,而且还会产生可怕的调试噩梦,如果你需要它,那么你的应用程序可能不会跟随MVC,因此,你正在使用控制器来重用模型,这是模式意图。
您可以使用视图对象的渲染或部分方法在布局或当前操作视图中渲染局部视图。
如果您有多个操作来处理选项卡中的多个可能的帖子,那么您应该设置所有这些操作以呈现相同的视图脚本,然后将直接从模型呈现所有带有数据的选项卡。
答案 1 :(得分:1)
如果您没有从现有标记生成选项卡/选项卡窗格,并且您正在按需加载内容,则只需检查用户是否有权在显示选项卡本身之前访问选项卡,并再次检查尝试加载标签的内容时。
检查用户是否具有这些访问权限应该是可接受的操作模式,并且执行起来不应该很昂贵。
如果这些操作产生的内容在某些独立页面中有效,那么除了选项卡之外,Action视图助手也是一种正确的方法。只需在生成选项卡时执行在操作中执行的相同ACL(或其他)检查。
答案 2 :(得分:1)
我不完全确定您的确切问题是什么,但您可以禁用布局:
$this->_helper->layout->disableLayout();
然后,请求的Action将只显示它的视图脚本,您可以将其加载到选项卡中。
您拥有的任何授权代码都将正常运行,您可以显示操作所请求的视图脚本,具体取决于他们是否具有访问权限。
答案 3 :(得分:0)
您可以使用try / catch块捕获任何访问异常:
try { // action throwing exceptions } catch (Exception $e) { // catch silently }