我剛剛遇到了我目前用於我的應用程序的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