【问题标题】:Zend Framework-does every webpage have it's own controller and indexAction and view?Zend Framework——每个网页都有自己的控制器和indexAction 和视图吗?
【发布时间】:2010-06-08 23:54:50
【问题描述】:

我想确保我设置正确。在一个有 10 个页面的典型网站上,每个页面是否都有自己的控制器和它自己的 IndexAction 以及它自己的 View 文件夹和它自己的 index.phtml 作为视图?

或者您是否有一个控制器具有多个 Page1Action、Page2Action 等,并且在 view/index 文件夹中有多个不同命名的 view.phtml 页面?

我倾向于前者,因为这样我就可以为每个页面拥有一个更清晰的控制器...

有标准,还是主观的?

【问题讨论】:

    标签: php zend-framework


    【解决方案1】:

    您的站点地图将在此问题中发挥重要作用。但是,取而代之的是,这里有几个例子。

    示例 1. 平面

    /foo
    /bar
    /baz
    

    您可能希望使用单独的控制器:Foo/IndexController.php、Bar/IndexController.php 和 Baz/IndexController.php,每个控制器都有一个 indexAction() 方法将信息传递给您的视图(再次分开) .

    示例 2. 现在稍微低一点

    /foo/bar
    /baz
    

    您只需要两个控制器:Foo/BarController 和 Baz/IndexController。如果 /foo 需要一个登录页面,您必须输入 Foo/IndexController.php 以确保安全。您的操作仍然是 indexAction()。因为您还没有深入到第三级,所以您的视图仍然是 index.phtml。

    示例 3. 直线

    /foo/bar/baz
    

    你只需要一个控制器:Foo/BarController.php。如果您需要 /foo 和 /foo/bar 的登录页面,则需要 /foo (Foo/IndexController) 的另一个控制器和两者的 indexAction()。使用 /foo/bar/baz 你现在实际上也有一个稍微不同的动作 - bazAction() (在 Foo/BarController.php 中)。你的视图现在是 baz.phtml。

    总结。

    站点地图越宽,您拥有的控制器就越多,操作就越少。站点地图越窄,控制器越少,操作越多。

    后记。

    我还应该说明,这也取决于使用默认路由模式。如果您在路由模式中做一些更复杂的事情,这一切都被抛在了窗外。有时我们使用路由来保持类的数量可控。当我们有一个广泛的站点地图时,可以创建一些自定义路由并在控制器中使用 __call() 来适当地传递视图数据。这只是给这只猫剥皮的另一种方法。

    【讨论】:

    • 这是一个很好的答案!你真的为我解开了很多困惑!谢谢!
    【解决方案2】:

    通常您会为一组相关的操作创建一个控制器。相关的意思是主观的。

    非常粗略地说,一组相关的Actions在同一个Model上运行。至少这是一个很好的起点,但它很少能这么简单,因为很少有实际应用程序仅包含每个模型上的 CRUD 操作。

    如果您将模型从简单的数据访问组件中分离出来,您可以更明智地为模型定义控制器操作的逻辑分组。模型是您的大部分代码用于业务逻辑的地方。数据库持久性只是模型的一个(可选)内部细节,用于在请求之间保留状态。但是模型不一定使用数据库。它可以是独立的,也可以是其他模型对象的聚合。

    默认情况下,每个动作都有自己的视图脚本。但这也只是一个起点,因为您可以使用 Layouts 使许多 View 脚本共享一些共同的标记,并且您可以使用 View Helpers 和 Partials 等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多