0

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

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

    /views/Products/index.php

  2. 我们有一个控制器:

    ProductsController 扩展控制器

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

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

/mysite/Products/some_product_alias

...我们应该在 actionIndex() 中处理它,这样它就不会将我们引导到 404 页面,而是通过别名“some_product_alias”获取数据,将其加载到产品模板中(我猜它应该是 /views/Products/index.php 或另一页)。同时,它需要保留为静态页面定义控制器/actionMethod 的可能性,这些静态页面是站点的主要部分并且是主菜单。那就是它应该这样工作:如果它可以在控制器中找到现有的 actionMethod,它只会调用它。如果找不到它,它会寻找从 DB 中的 URL 提取的别名。如果它存在,那么它会获取数据并将其加载到模板中。当然,这项任务很容易完成,但不幸的是,我是 Yii 的新手,仍然不知道该怎么做 :( 非常感谢您的帮助!

4

2 回答 2

0

您应该查看 Yii 文档以参数化您在此处找到的路线

它的要点是您必须修改主配置文件并将此路由映射为不是控制器/操作,而是控制器/{alias},默认操作为视图,因此如下所示:

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

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

于 2012-09-22T09:25:27.533 回答
0

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

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

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

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

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

于 2012-09-24T18:16:57.087 回答