0

我在 Yii 框架上玩得很好,现在我想更深入一点,我想做的是设置一个应用程序,其中几个不同的 URL 将指向同一个控制器。

通常 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 类,$this->_id = 文章、显示或启动但应用程序本身仍会加载站点/错误

我猜我必须在其他地方设置/覆盖控制器。我努力了

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

但这没有任何效果

也许 Yii 已经设置好,并且必须为每个 URL 要求一个特定的控制器,但这意味着为客户开发相当严格的解决方案,并要求他们每次想要添加新控制器时都调用开发人员。

希望我已经解释了我正在努力做好的事情。

4

1 回答 1

0
  • 创建一个页面对象(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')

为该页面找到合适的文章

于 2013-07-08T07:16:05.733 回答