【问题标题】:How do you decide if something goes in the view or the controller? (Zend Framework)您如何决定视图或控制器中是否有内容? (Zend 框架)
【发布时间】:2008-10-08 14:44:19
【问题描述】:

你如何决定某些东西是进入视图还是控制器?

这里有一些具体的例子:

  • Zend_Captcha:控制器生成验证码并将其传递给视图还是由视图生成?
  • Zend_Alc:视图是否决定是否应该向用户显示视图的一部分,或者您是否有多个视图取决于可用的操作,并且控制器会选择正确的一个进行显示?
  • Zend_Session:视图是根据会话数据跟踪谁在查看它,还是由控制器解析并作为某种参数呈现给视图?

关于哪些组件(模型、视图或控制器)应该执行哪些操作的规则或指南是否写在我可以查看它们的地方?我在 Zend Framework 网站上的文档中没有看到。

【问题讨论】:

    标签: php model-view-controller zend-framework separation-of-concerns


    【解决方案1】:

    一般来说,这个问题可以适用于任何 MVC 框架。以下是我使用的指南:

    1. 瘦控制器。如果可能的话,让你的控制器只在你的模型上调用业务逻辑并将结果传递给你的视图。

    2. 视图只做视图逻辑。做任何与视觉交互相关的事情,比如生成验证码、隐藏和显示基于 ACL 的链接。不要计算总数。不要在模型上调用逻辑。不要做业务逻辑。通常可以从视图中读取会话以隐藏和显示数据/链接。但不要依赖它来保证安全性:让你的控制器也安全。

    3. 胖模型。将尽可能多的业务逻辑放入您的模型中。这样,您可以在控制器之间共享它们。如果您发现自己在一个控制器中迭代模型的元素,根据某些规则重置值,或者以其他方式执行复杂的业务逻辑,那么您应该尝试找到一种方法将该逻辑放入模型层。

    希望这会有所帮助。

    【讨论】:

    • 我赞同皮特所说的。视图应该只显示交给它的内容。最多,您可以在视图中运行循环,但这就是逻辑。
    【解决方案2】:

    对于 Capcha,您可以在视图中生成。对于 Acl,请使用视图。 Zend_Session 可以被控制器和视图访问

    【讨论】:

    • 我很好奇,既然您说“可以”和“可访问”,听起来好像是在某处写下来的。但是我没有在指南页面上看到它。我错过了吗?是在别的地方吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 2013-09-27
    相关资源
    最近更新 更多