我在Yii框架方面玩得很好,现在我想更深入一点,我想做的是建立一个应用程序,其中几个不同的URL将指向同一个控制器。
通常domain.com/content会指向类ContentController,这是MVC中的标准。
我想做的是设置三个控制器(可能更多,但这可以启动),即ArticlesController、DisplayController和SplashController。
然后,我会为客户端设置一个本质上是CMS的东西,他们可以创建任意多的页面,并将它们指向上面三个控制器,我已经设置了这些控制器来处理数据。
例如,我的客户可以设置以下页面:新闻、通知、技术,并将它们全部指向ArticlesController,还可以设置页面:管理、特价、支持,并将其全部指向DisplayController。
我知道所有这些控制器都可以使用Gii模块创建,但在这种情况下,这不是一个选项,因为我认为这不适合非技术人员。
我只想让我的客户能够登录CMS,决定创建一个名为"randompage"的新页面,使用下拉菜单将其指向ArticlesController,然后为其写一堆文章,现在可以在domain.com/randompage/article-1 domain.com/randcompage/article-2 上访问这些文章
由于没有控制器随机对照控制器,标准设置将指向站点/错误
到目前为止,我所做的是在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类,$this->_id=articles、display或splash,但应用程序本身仍然加载site/error
我想我必须在其他地方设置/覆盖控制器。我试过
Yii::app()->setController($newControllerID)
但这对没有任何影响
也许Yii已经设置好了,必须为每个URL指定一个特定的控制器,但这意味着为客户开发相当严格的解决方案,并要求他们每次添加新控制器时都要调用开发人员。
希望我已经解释了我努力做好的事情。
- 创建页面对象(id、title、slug、description、image)
- 创建一个文章对象(id、pageId、title、slug、content)
配置您的urlManager:
'<pageSlug>/<articleSlug>' => 'article/view'
在您的ArticleController->ViewAction评估
- Yii::app()->request->getParam('pageSlug')
- Yii::app()->request->getParam("articleSlug")
为该页面找到合适的文章