yii用许多子类重写url

时间:2014-07-08 02:29:21

标签: yii url-rewriting many-to-one

我在yii工作有问题: 我想制作一个这样的网址:

http://domainabc.com/catalog/cat1/cat2/cat3....?sort=name&limit=10&brand=....

它指向控制器:CatalogController,动作索引

网址只是说cat1是父级,cat2是cat3的父级。

所以在这个动作中它只是获得最后一个类别的产品(例如cat3)

但目前我不知道让最后一只猫获得产品的最佳方式是什么。

错误:

  

"系统无法找到请求的操作' cat1'"

我们必须使用/来分隔每个类别。

1 个答案:

答案 0 :(得分:0)

您需要清除一些内容,这个类别列表是否已修复(您将始终拥有3个级别的类别,不少于或少于此类别),或者此类别列表将是动态的。 如果您有固定的类别列表,您可以轻松设置Yii url规则:

'catalog/<cat1:\w+>/<cat2:\w+>/<cat3:\w+>' => 'catalog/myAction'

或稍微动态:

'<controller:\w+>/<cat1:\w+>/<cat2:\w+>/<cat3:\w+>' => '<controller>/list'

如果您希望捕获动态类别列表,我和我的团队通常会使用我们命名为SeoBehavior的内容。我们将此行为附加到表示类别内容的模型,并根据此内容所属的类别列表保存此行为构建URL路径并将其保存到seo数据库表(我们保留有关模型名称和模型ID的信息,也可以一些其他有用的配置参数)。 在您的网址规则中,您可以添加以下内容:

'<url:[a-z0-9\-_\.\/]+>' => 'myController/myAction'

只有你需要保持这个规则像列表上的最后一样,因为它会捕获所有内容。在这个行动中,你得到这个&#39; url&#39;参数和搜索seo数据库表来获取记录,从该记录中你可以看到什么是模型名称及其ID,以便你可以加载正确的内容。

我希望这有帮助。