Yii-动态加载控制器


Yii - Dynamically Loading a Controller

我在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")

为该页面找到合适的文章