Yii中的回调操作处理程序



这是我的问题:我开发了一个网站,用户可以自己添加内容。该内容通过要从数据库中提取的id和/或别名获取标识符。目标不是为包含该内容的每个页面创建视图和控制器。我们不应该为他们寻找这些。相反,我们在actionIndex()中处理URL,获取定义适当内容的URL部分,并将其进一步加载到模板中。例如:

  1. 我们有一个主要部分"产品"。其视图位于

    /views/Products/index.php

  2. 我们有一个控制器:

    产品控制器扩展控制器

  3. 我们有一个默认的方法actionIndex()

所以当我们得到这样的URL时:

/mysite/Products/some_product_alias

我们应该在actionIndex()中处理它,这样它就不会引导我们进入404页面,而是通过别名"some_product_alias"将数据加载到产品模板中来获取数据(我想它可能是/views/products/index.php或其他页面)。同时,它需要保留为静态页面定义控制器/操作方法的可能性,静态页面是网站的主要部分,也是主菜单。也就是说,它应该这样工作:如果它能在控制器中找到一个现有的actionMethod,它就会调用它。如果找不到它,它就会在DB中查找从URL中提取的别名。若它存在,那个么它就会获取数据并将其加载到模板中。当然,这项任务是可以管理的,但不幸的是,我是Yii的新手,仍然不知道如何做到:(我将非常感谢你的帮助!

您应该查看Yii关于参数化路线的文档,在这里可以找到

它的要点是,你必须修改你的主配置文件,并将此路线映射为不是控制器/动作,而是具有默认视图动作的控制器/{别名},因此在以下行中:

'rules'=>array(
'<controller:w+>/<id:d+>'=>'<controller>/view',
),

这将映射像Products/15这样的路线来使用操作Products/view,并将GET参数id设置为15

答案(第一部分)几乎就是DeadAlready告诉我们的。但这里有必要补充一些内容。1.我们应该为我们的别名设置一个规则到urlManager(是的!):

Product/<alias:w+>' =>  'product/index'

请注意,它将在控制器中调用actionIndex(),并且不会按别名查找方法。2.我们必须指向变量$alias(该名称与模式子字符串相同,即"$alias"/"

function actionIndes($alias){
...handle event...
}

之后,我们可以处理事件以从DB获取数据。

最新更新