我刚刚遇到了我目前用于我的应用程序的MVC架构的局限之一。目前,我的网址是这样的:MVC架构的多级控制器
www.example.com/controller/action
每个请求到达前端控制器,它从URL加载请求的控制器类,并执行它的动作(方法)。这工作正常,直到你需要开始使用嵌套控制器。
例如: 有一个'用户'控制器可以保存createUser(),editUser(),deleteUser()等方法。所有完全可能的当前URL结构......但是如果我们还需要管理用户类型?我们需要一个单独的控制器'usertypes',它也包含createUserType(),editUserType()等方法。但是,由于用户类型是用户的一部分,'usertypes'控制器应嵌套在用户控制器中,因此:
www.example.com/users/usertypes/addusertype
然而,对于当前的URL结构,这是不可能的......我怎样才能让(如果你愿意或多级)控制器使用嵌套的?
更新:这是我正在使用的应用程序的基本表示形式:这是一个管理部门的基本业务应用程序,可以添加,查看,编辑和删除3类别(促销,邮件和持卡人)的数据。每个类别代表数据库中的一个表格,并具有自己独特的字段。帐户需要由管理员创建,用户无法自行创建帐户,也无法查阅其用户个人资料。
对于这些类别中的每一个,我都制作了一个控制器,其中包含add(),edit(),getAll(),getSingle(),delete()等操作...每个操作都会调用相应的方法从模型中渲染相应的视图。
这是所有可能与当前的URL结构,其中有网址,如:
example.com/promotions/add
example.com/promotions/getsingle?id=123
最近,他们问我,使它能够同时管理类型的促销活动,邮件和持卡人。现在他们已经有学校折扣,20%的折扣等等,但他们想要增加更多,因为他们希望。
这意味着我需要一个PromotionTypes控制器,该控制器还包含add(),getAll(),getSingle(),delete()等操作...如果PromotionTypes控制器可以嵌套在原始促销中控制器,这使得网址像这样:
example.com/promotions/promotiontypes/add
,而不是
从我目前的前端装载机,这是不可能的,因为URL的第一部分将自动被作为控制器处理,第二部分作为从中执行的动作。
你有控制器和模型混淆。你所有的方法都应该存在于你可以随时访问的模型中。控制器应该像处理过的那样处理特定情况,但要足够灵活,可以使用任何你需要的模型。您是否使用自动加载器加载您的课程/模型? – 2012-08-14 23:49:56
如果您将控制器和路由的概念分开,并且有一个可配置的路由器来确定给定url的正确控制器和操作,则不需要嵌套控制器。这是主要框架的作用。 – wgcrouch 2012-08-14 23:51:27