使用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”函数,以便捕获路径,然后将其指向我自己的渲染函数实现。然而,这不允许我抓住这条路
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'。。。哈哈