我正在尝试用Yii做一个类似cms的应用程序。功能是这样的:
http://www.example.com/article/some-article-name
我所要做的是让所有的动作都通过ArticleController.php
中的actionIndex()
方法,并让这个方法决定如何处理动作。所以我的问题是如何在Yii中将所有的动作路由到控制器中的一个方法?
我正在尝试用Yii做一个类似cms的应用程序。功能是这样的:
http://www.example.com/article/some-article-name
我所要做的是让所有的动作都通过ArticleController.php
中的actionIndex()
方法,并让这个方法决定如何处理动作。所以我的问题是如何在Yii中将所有的动作路由到控制器中的一个方法?
4条答案
按热度按时间bpzcxfmw1#
在您的情况下,我认为使用过滤器或
beforeAction
方法会更好。筛选方式:
过滤器是被配置为在控制器动作执行之前和/或之后执行的一段代码。
样品:
beforeAction
方式:此方法是在即将执行操作之前调用的(在所有可能的筛选器之后)。您可以重写此方法,以便为操作做最后的准备。
样品:
顺便说一下,您也可以通过以下方式访问控制器中的当前操作:
$this->action
,以获得id
的值:$this->action->id
:t1qtbnec2#
在配置中urlManager规则的开头添加以下内容:
nkcskrwz3#
您的规则必须与以下内容类似:-
如果控制器和/或操作不存在,这会将所有请求传递给
ArticleController
PHP类中的actionIndex
函数。goqiplq24#
我猜您只是想在“视图”文件夹中放入一堆静态页面,并自动选择和呈现它们,而无需在控制器中为每个页面添加操作。
上面建议的filters()和beforeAction(),甚至__construct()都不适用于这个目的(如果action不存在,filters和beforeaction根本不会启动,而且__construct非常混乱,因为如果你把你的功能放在__construct中--在这一点上,Yii甚至不知道它应该调用哪个控制器/action/视图)
但是,有一个简单的解决方法,它涉及URL管理器
在配置的URL管理器规则中,添加以下行之一(取决于路径设置)
或
然后在你的文章控制器中就可以进行这个(或类似的)索引操作
那么你就可以调用像/articles/myarticle或/articles/yourarticle这样的页面,而不需要在你的控制器中添加任何函数,你所需要做的就是在你的views/articles文件夹中添加一个名为myarticle.php或yourarticle.php的文件,然后在这些文件中输入你的html内容。