【问题标题】:Callback action handler in YiiYii 中的回调操作处理程序
【发布时间】:2012-09-22 07:26:20
【问题描述】:

这是我的问题: 我开发了一个网站,用户可以自己添加内容。 该内容通过要从 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 的新手,仍然不知道该怎么做 :( 非常感谢您的帮助!

【问题讨论】:

    标签: view event-handling controller yii action


    【解决方案1】:

    您应该查看有关参数化路由的 Yii 文档here

    它的要点是你必须修改你的主配置文件并将这个路由映射到不是控制器/动作,而是控制器/{alias},默认动作是视图,所以在以下几行中:

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

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

    【讨论】:

    • 谢谢!但这里还有一个问题。我添加到我的问题:
    • 感谢您的回答!但这里有一点要说清楚。我在我的问题中添加了以下内容:**************************** 同时它需要保留定义控制器/操作方法的可能性对于作为网站主要部分并作为主菜单的静态页面。那就是它应该这样工作:如果它可以在控制器中找到现有的 actionMethod,它只会调用它。如果找不到它,它会寻找从 DB 中的 URL 提取的别名。如果它在那里存在,那么它会获取数据并将其加载到模板中。 *********** 再次感谢您!
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      相关资源
      最近更新 更多