10

我正在构建一个界面,我想将其用作“选项卡式浏览”之类的功能。这些选项卡中的每一个都已编写为一个操作,并且选项卡式界面可以作为指向各个选项卡的链接正常工作。我决定尝试为这个控制器编写“索引”页面——将所有选项卡的内容放入隐藏的 div 中并使用 jQuery 在它们之间进行交换,但是一旦我开始使用动作视图助手——我遇到了很多人说这是不好的做法。(见这篇文章

其中一些操作会构建表单 - 从模型中获取一些数据等以显示。我希望每个动作都能继续独立运行(一些解析形式也是如此)。

浏览到 /item 应该会为您提供选项卡式菜单,以及隐藏标记中的所有 div 内容 - 其中 /item/tab2 是特定操作(例如表单提交)。

另一个并发症/警告 - 如果用户无权访问该“选项卡”,某些操作将引发访问异常。我不希望两次在系统中建立访问检查(因此显示一个内容为空的选项卡)。

我只是想弄清楚处理这类事情的最佳做法是什么,我认为动作助手可能就是它。如果我尝试使用 View Helpers - 我开始怀疑这是否是组装 Zend_Form 的正确位置。

有没有人对不使用的“正确”解决方法有任何建议Zend_View_Helper_Action

4

4 回答 4

7

正如我在您引用的文章中所述,解决操作视图助手的正确方法是创建直接访问模型以获取所需数据的部分。这可以通过视图助手(您自己制作;))如果这会在您的视图中涉及很多逻辑。

action view helper 不仅受到性能问题的困扰,而且还制造了可怕的调试噩梦,如果你需要它,那么你的应用程序可能没有遵循 MVC,因此,你使用控制器来重用,而不是模型,这是模式意图。

You can render partials from within your layout or current actions view with the render or partial methods of the view object.

If you have multiple actions to deal with multiple possible posts from your tabs, then you should set all of these actions to render the same view script, which will then render all of the tabs with data direct from the model.

于 2009-07-28T12:03:59.627 回答
1

如果您没有从现有标记生成选项卡/选项卡窗格,并且您正在按需加载内容,那么您只需在显示选项卡本身之前检查用户是否有权访问该选项卡,并在尝试加载选项卡的内容。

检查用户是否具有这些访问权限应该是一种可接受的操作模式,并且执行起来不应该很昂贵。

如果这些操作生成的内容除了选项卡之外,还可以在某些独立页面中使用,那么操作视图帮助程序是正确的继续方式。只需执行生成选项卡时在操作中执行的相同 ACL(或其他)检查。

于 2009-06-03T21:07:58.333 回答
1

我不完全确定您的确切问题是什么,但是您可以禁用布局:

$this->_helper->layout->disableLayout();

然后请求的操作将只显示它的视图脚本,您可以将其加载到选项卡中。

您拥有的任何授权代码都将正常运行,您可以显示请求的操作视图脚本,或者不显示,这取决于他们是否有权访问。

于 2009-06-07T05:55:09.413 回答
0

您可以使用 try/catch 块捕获任何访问异常:

try { // action throwing exceptions } catch (Exception $e) { // catch silently }
于 2009-06-08T12:15:14.740 回答