2013-07-05 63 views
0

我對Yii框架有了很好的發揮,現在我想深入一點,我想要做的是設置一個應用程序,其中幾個不同的URL指向相同控制器。Yii - 動態加載控制器

通常domain.com/content會指向MVC中標準的ContentController類。

我想要做的是設置三個控制器(也許更多,但這將啓動),即ArticlesController,DisplayController和SplashController。

然後,我會設置一個客戶端本質上的CMS,他們將能夠創建儘可能多的頁面,並將它們指向上述三個控制器,我已經設置它們來處理數據。因此,例如我的客戶可以設置以下頁面:新聞,通知,技術,並讓他們都指向ArticlesController,並設置頁面:管理,特價,支持,並讓他們都指向DisplayController。

我知道所有這些控制器都可以使用Gii模塊創建,但在這種情況下它不是一個選項,因爲我不認爲這適用於非技術人員。

我只想讓我的客戶端能夠登錄到CMS,決定他想創建一個名爲「randompage」的新頁面,使用下拉菜單將其指向ArticlesController,然後爲它寫一堆文章現在有這些條款在domain.com/randompage/article-1 domain.com/randompage/article-2

設立的情況下訪問標準將指向網站/錯誤,因爲沒有控制RandompageController

我到目前爲止所做的是在Controller類中創建一個構造函數,我可以覆蓋控制器ID

class Controller extends CController { 
    function __construct($id) { 
     // Code here which successfully pulls from the database 
     // which controller the current page should point to. 
     parent::__construct($newControllerID) 
    } 
} 

如果我在CController類檢查,$此 - > _ ID =無論是文章,展示或飛濺,但應用程序本身劇照負載網站/錯誤

我猜我必須設置/覆蓋控制器別處。我曾嘗試

Yii::app()->setController($newControllerID) 

但沒有

也許Yii中設置任何影響,必須要求每個URL特定的控制器,但是這將意味着爲客戶開發,而剛性的解決方案,並要求他們每次他們想添加一個新的控制器時,都要給開發者打電話。

希望我已經解釋了我想要做的很好。

+0

tl; dr。不,不,在Yii中,訪問來自不同URL的同一個控制器很簡單,只需設置你的urlmanager即可。 – 2013-07-05 17:39:14

+0

@PeterM他正在試圖做與你所說的相反的事情。他正試圖使用​​一個URL訪問3個不同的控制器。 – Pitchinnate

+0

程序如何知道'/ articles/update/1'是新聞,通知還是技術對象?所有這些都是相同的模型還是你有三個不同的模型?如果他們都是相同的模型,爲什麼你會想要三個不同的控制器? – Pitchinnate

回答

0
  • 創建一個頁面對象(ID,標題,蛞蝓,描述,圖片)
  • 創建項目對象(ID,PAGEID,標題,蛞蝓,內容)

配置您的urlManager:

'<pageSlug>/<articleSlug>' => 'article/view' 

在ArticleController-> ViewAction這一評估

  • 的Yii ::應用程序() - >請求 - > getParam( 'pageSlug')
  • 的Yii ::應用程序() - >請求 - > getParam( 'articleSlug')

找到合適的文章對於該頁面

+0

你不必使用冗長的'Yii :: app() - > request-> getParam('pageSlug')'只需使用'$ _GET ['pageSlug']' – 2013-07-08 09:06:25