使用YII完全自定义路径?

使用YII完全自定义路径?,yii,Yii,我有各种各样的产品,它们都有自己的路径。例如: 电子产品/mp3播放器/索尼hg122 健身/器械/健身房老板 如果您希望能够访问此格式的URL。例如: http://www.mysite.com/fitness/devices/gymboss http://www.mysite.com/electronics/mp3-players/sony-hg122 我的策略是重写SiteController的“init”函数,以便捕获路径,然后将其指向我自己的渲染函数实现。然而,这不允许我抓住这条路

我有各种各样的产品,它们都有自己的路径。例如:

  • 电子产品/mp3播放器/索尼hg122
  • 健身/器械/健身房老板
  • 如果您希望能够访问此格式的URL。例如:

    http://www.mysite.com/fitness/devices/gymboss
    http://www.mysite.com/electronics/mp3-players/sony-hg122
    
    我的策略是重写SiteController的“init”函数,以便捕获路径,然后将其指向我自己的渲染函数实现。然而,这不允许我抓住这条路

    我走错方向了吗?这样做的正确策略是什么

    **编辑**

    我想我必须利用这个机会。但是,如果路径格式在数据库中都是自定义的,如何动态添加它们呢?

    在URL管理器(protected/config/main.php)中,将
    urlFormat
    设置为
    path
    (并将
    showScriptName
    设置为
    false
    (这会隐藏URL的index.php部分))

    接下来,在规则中,您可以设置如下内容:

    catalogue/<category_url:.+>/<product_url:.+> => product/view,
    
    该规则的工作原理是,任何以单词catalog(直接在您的域名之后)开头,后跟另一个单词(
    category\u URL
    )和另一个单词(
    product\u URL
    )的URL都将被定向到该控制器/操作

    您会注意到,在我的示例中,我在类别和产品前面加上单词catalog。很明显,你可以用你喜欢的任何东西来代替它,或者把它全部去掉。我把它放进去的原因是,考虑下面的网址:

    http://mywebsite.com/site/about
    
    如果您遗漏了URL的“目录”部分,并且仅将您的规则定义为:

    <category_url:.+>/<product_url:.+> => product/view,
    
    /=>产品/视图,
    
    URL管理器会将URL的站点部分视为
    类别URL
    值,将about部分视为
    产品URL
    。为了防止这种情况,您可以使用URL的目录保护,或者为非目录页面定义规则(即,为站点/关于定义规则)

    规则从上到下进行解释,只匹配第一条规则。显然,您可以根据需要为任意多个不同的URL结构添加任意多的规则

    我希望这会让你走上正确的道路,在你的URL管理器(protected/config/main.php)中,你可以随意评论你需要的任何问题或澄清,将
    urlFormat
    设置为
    path
    (并将
    showScriptName
    设置为
    false
    (这会隐藏URL的index.php部分))

    接下来,在规则中,您可以设置如下内容:

    catalogue/<category_url:.+>/<product_url:.+> => product/view,
    
    该规则的工作原理是,任何以单词catalog(直接在您的域名之后)开头,后跟另一个单词(
    category\u URL
    )和另一个单词(
    product\u URL
    )的URL都将被定向到该控制器/操作

    您会注意到,在我的示例中,我在类别和产品前面加上单词catalog。很明显,你可以用你喜欢的任何东西来代替它,或者把它全部去掉。我把它放进去的原因是,考虑下面的网址:

    http://mywebsite.com/site/about
    
    如果您遗漏了URL的“目录”部分,并且仅将您的规则定义为:

    <category_url:.+>/<product_url:.+> => product/view,
    
    /=>产品/视图,
    
    URL管理器会将URL的站点部分视为
    类别URL
    值,将about部分视为
    产品URL
    。为了防止这种情况,您可以使用URL的目录保护,或者为非目录页面定义规则(即,为站点/关于定义规则)

    规则从上到下进行解释,只匹配第一条规则。显然,您可以根据需要为任意多个不同的URL结构添加任意多的规则


    我希望这会让您走上正确的道路,您可以随时提出任何问题或进行澄清

    爱斯基摩的设置对于大多数Yii系统来说是一个很好的方法。但是,对于您的数据库,我建议您创建一个自定义URL规则来查询您的数据库:


    注意:URL规则是在每个Yii请求上解析的,所以在这里要小心。如果你效率不高,你可以很快降低你的网站速度。默认情况下,规则是缓存的(如果您有缓存设置),但我不知道这是否适用于动态数据库规则(我认为不适用)。

    爱斯基摩的设置对于大多数Yii系统来说是一种可靠的方法。但是,对于您的数据库,我建议您创建一个自定义URL规则来查询您的数据库:


    注意:URL规则是在每个Yii请求上解析的,所以在这里要小心。如果你效率不高,你可以很快降低你的网站速度。默认情况下,规则是缓存的(如果您有缓存设置),但我不知道这是否适用于动态数据库规则(我认为不适用)。

    愚蠢的问题,但在示例中,您实际将文件放在哪里?新的CarUrlRule类文件?可能在您的组件文件夹中好的,我知道了。。。。它取决于-->'class'=>'application.components.CarUrlRule'。。。hahaDumb是一个问题,但在本例中,您实际将文件放在哪里?新的CarUrlRule类文件?可能在您的组件文件夹中好的,我知道了。。。。它取决于-->'class'=>'application.components.CarUrlRule'。。。哈哈