CMS动态生成URL,意思是url与Controller不再是对应关系,对应关系去数据库读,怎么操作 [ 2.0 版本 ]
想动态生成URL,意思是url与Controller不再是对应关系,对应关系去数据库里读。
具体使用的场景是:
做一个CMS,内容的网址可以自定义,因此不可能让一篇文章对应一个Controller,也不现实。
有没有办法把这些请求都转发到某个或者某几个controller去,然后把当前的request,url信息也传递过去,然后再那几个controller里统一处理这些请求?
共 2 个回答
-
dingjj2010 回答于 2016-03-14 11:30 举报
url不是可以传参么?根据文章id,一个文章的controller就可以处理所有文章了额。。
共 6 条回复dingjj2010 回复于 2016-03-15 09:35 回复@kissgxd 根据你的描述,我大概懂了。解决方法可以使绑定beforerequest方法,在请求处理之前,处理请求的url,通过数据库匹配真实的controller。。
文档如下:应用在处理请求过程中会触发事件,可以在配置文件配置事件处理代码,如下所示:
[
'on beforeRequest' => function ($event) { // ... },
]
on eventName 语法的用法在 Configurations 一节有详细描述.另外,在应用主体实例化后,你可以在引导启动 阶段附加事件处理代码,例如:
\Yii::$app->on(\yii\base\Application::EVENT_BEFORE_REQUEST, function ($event) {
// ...
});
yii\base\Application::EVENT_BEFORE_REQUEST该事件在应用处理请求before之前,实际的事件名为 beforeRequest。
在事件触发前,应用主体已经实例化并配置好了,所以通过事件机制将你的代码嵌入到请求处理过程中非常不错。 例如在事件处理中根据某些参数动态设置yii\base\Application::language语言属性。
@dingjj2010 您好,可否问一下这个是文档的哪一章节。我认真看一下
dingjj2010 回复于 2016-03-17 13:57 回复@kissgxd http://www.yiichina.com/doc/guide/2.0/structure-applications 应用事件。不过上面我copy的已经是他全部的介绍了。
kissgxd
最后登录:2019-05-07
在线时长:26小时5分
- 粉丝3
- 金钱3810
- 威望30
- 积分4370