我想确保我正确设置。在一个有10页的典型网站上,每个页面都有它自己的控制器,它有自己的IndexAction,它有自己的View文件夹,它有自己的index.phtml作为视图吗?
或者你有一个控制器有多个Page1Action,Page2Action等,并且在view / index文件夹中有多个不同名称的view.phtml页面?
我倾向于前者,因为那时我可以为每个页面设置一个更清洁的控制器......
有标准,还是主观?
答案 0 :(得分:3)
您的站点地图将在此问题中发挥重要作用。但是,取而代之的是,这里有一些例子。
示例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
你是onc控制器:Foo / BarController.php。如果你需要/ foo和/ foo / bar的登陆页面,你需要/ foo(Foo / IndexController)的另一个控制器和两者的indexAction()。使用/ foo / bar / baz你现在实际上也是一个稍微不同的动作--bazAction()(在Foo / BarController.php里面)。你的观点现在是baz.phtml。
<强>概要强>
站点地图越宽,控制器越多,操作越少。站点地图越窄,控制器越少,操作越多。
<强>后记强>
我还应该说,这也取决于使用默认路由模式。如果你在路由模式上做了一些更复杂的事情,那么这一切都会被抛到窗外。有时我们使用路由来保持可管理的类数。当我们有一个宽的站点地图时,可以创建一些自定义路由并在控制器中使用__call()来适当地切换视图数据。只是另一种皮肤养猫的方法。
答案 1 :(得分:1)
通常,您将为相关的一组操作创建一个Controller。什么相关手段是主观的。
非常粗略地说,一组相关的操作在同一个模型上运行。至少这是一个很好的起点,但它很少能够解决这个问题,因为很少有真实应用程序只包含每个模型上的CRUD操作。
如果将模型与简单的数据访问组件分离,则可以更明智地为模型定义控制器操作的逻辑分组。模型是业务逻辑存在大部分代码的地方。数据库持久性只是模型的(可选)内部细节,用于保护状态从请求到请求。但是Model不一定使用数据库。它可以是独立的,也可以是其他Model对象的聚合。
默认情况下,每个Action都有自己的View脚本。但这也只是一个起点,因为你可以使用Layouts使许多View脚本共享一些,如果他们的标记是共同的,你可以使用View Helpers和Partials等。