这是我的问题: 我开发了一个用户自己添加内容的网站。 该内容通过id和/或别名获取要从db中提取的标识符。目标不是为包含该内容的每个页面创建视图和控制器。我们不应该为他们寻找那些。相反,我们在actionIndex()中处理URL,获取定义适当内容的URL部分,并进一步将其加载到模板中。 例如:
我们有一个主要部分产品。它的观点放在
/views/Products/index.php
我们有一个控制器:
ProductsController扩展Controller
我们有一个默认方法actionIndex()
所以当我们得到这样的网址时:
/mysite/Products/some_product_alias
...我们应该在actionIndex()中处理它,所以它不会将我们引导到404页面,而是通过别名“some_product_alias”将数据加载到产品模板中(我猜它应该是/ views / Products / index) .php或其他一些页面)。 同时,它需要保留为静态页面定义controller / actionMethod的可能性,静态页面是站点的主要部分并且是主菜单。 那应该是这样的: 如果它可以在控制器中找到现有的actionMethod,它就会调用它。如果找不到它,它会在DB中寻找从URL中提取的别名。如果它存在,那么它获取数据并将其加载到模板中。 肯定这个任务是相当可控的,但不幸的是我是Yii的新秀,仍然不知道该怎么做:( 我非常感谢你的帮助!
答案 0 :(得分:0)
您应该查看关于参数化找到的路线here
的Yii文档它的要点是你必须修改你的主配置文件并将这个路由映射到不是控制器/动作,而是将控制器/ {alias}映射到默认的视图操作,所以有以下几行:
'rules'=>array(
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
),
这会将Products / 15之类的路由映射到使用操作产品/视图并将GET参数ID设置为15
答案 1 :(得分:0)
答案(第一部分)几乎就是DeadAready告诉的。 但这里有必要添加一些东西。 1.我们应该将别名的规则设置为urlManager(是的!):
Product/<alias:\w+>' => 'product/index'
请注意,它将在控制器中调用actionIndex(),并且不会通过别名来查找方法。 2.我们必须指向变量$ alias(该名称与模式子串相同,即“$ alias”/“
function actionIndes($alias){
...handle event...
}
之后我们可以处理从DB获取数据的事件。