Yii - 动态加载控制器

时间:2013-07-05 17:28:09

标签: php yii yii-routing

我已经很好地利用了Yii Framework,现在我想更深入一点,我想要做的是设置一个应用程序,其中几个不同的URL指向同一个控制器。

通常,domain.com/content将指向类ContentController,它是MVC中的标准。

我想要做的是设置三个控制器(可能更多,但这将开始),即ArticlesController,DisplayController和SplashController。

然后,我会为客户端设置基本上是CMS,并且他们可以根据需要创建任意数量的页面,并将它们指向上述三个控制器,我已经设置了这些控制器来处理数据。

因此,例如我的客户可以设置以下页面:新闻,通知,技术,并让它们都指向ArticlesController,还设置页面:管理,特价,支持,并让它们全部指向DisplayController。 / p>

我知道所有这些控制器都可以使用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设置一个特定的控制器,但这意味着要为客户开发相当严格的解决方案,并要求他们每次想要添加新控制器时都要在开发人员中调用。

希望我已经解释了我想要做的事情。

1 个答案:

答案 0 :(得分:0)

  • 创建页面对象(id,title,slug,description,image)
  • 创建文章对象(id,pageId,title,slug,content)

配置你的urlManager:

'<pageSlug>/<articleSlug>' => 'article/view'
在你的ArticleController-&gt; ViewAction评估

  • 的Yii ::应用程序() - &GT;请求 - &GT; getParam( 'pageSlug')
  • 的Yii ::应用程序() - &GT;请求 - &GT; getParam( 'articleSlug')

找到该页面的正确文章