商店是模块,产品是控制器。我的链接有一个名为item的附加参数,它是产品的名称。当我点击链接时,它要么永远不会生成所需的网址,要么页面不会显示。
我尝试了几种方法。
'shop/product/view/<id:\d+>/<item:\w+>'=>'<item>',
这给了我shop / product / view / 6?item = name
'<module:(shop)>/<controller:(product)>/<action:(view)>/<id:\d+>/<item:\w+>'=>'<item:\w+>'
这给了我与上面相同的内容
shop/product/view/id/<id:\d+>/item/<item:\w+>'>=>'shop/<item:\w+>'
,这给了我错误页面Unable to resolve the request "shop/name"
。
我试图编写自己的扩展curlmanager但失败了。它给了我相同的url.shop/product/view/6?item=name
class UrlManager extends CUrlManager
{
public $connectionID = 'db';
public function createUrl($manager,$route,$params,$ampersand)
{
if ($route == 'shop/product/view'){
$product = Product::model()->findByPk($params['id']);
$url=$product->product_name;
return Yii::app()->createUrl(trim($url,'+'),$params,$ampersand);
}
更新:
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'rules'=>array(
'shop/product/view/id/<id:\d+>/item/<item:\w+>'=>'<item>',
//'category'=>array('site/category', 'caseSensitive'=>false),
//'shop'=>array('shop/product/view','caseSensitive'=>false),
//'<module:\w+>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'<module>/<controller>/<action>',
//'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>',
// '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
// 'reset/<id:\d+>/<item:\w+>'=>array('site/reset/id', 'caseSensitive'=>false),
),
),
答案 0 :(得分:0)
shop/<item:\w+>
看起来与控制器/操作完全相同,所以我相信它会被其他一些规则覆盖。你可以发布所有规则来查看它们吗?
还尝试将此规则放在rules数组的开头,这应该使它优先于其他规则。