我在YII中有域名:www.example.com/product-url-1234
如何在urlManager中设置规则以及如何使用controller/action/id
答案 0 :(得分:1)
如果您想使用此网址www.example.eu/product-url-1234
并假设'index'
是将处理请求的'user'
控制器的操作名称
然后创建一个像
这样的规则 '<id:.*?>'=>'user/index'
现在,如果您将使用Yii::app()->createUrl('user/index',array('id'=>'product-url-1234'))
然后它会给你想要的结果。
如果您访问此网址,User/Index
将处理该请求。
答案 1 :(得分:0)
您正尝试将所有请求转发到根级别的一个控制器。
我假设您的所有请求都是重定向的产品/视图路径
在您的配置中转到网址部分,
'(.*)'=>'product/view'
'urlManager' => array(
'urlFormat' => 'path',
'showScriptName' => false,
'rules' => array(
'(.*)' => 'product/view',
'post/<id:\d+>/<title:.*?>' => 'post/view',
'posts/<tag:.*?>' => 'post/index',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
),
这意味着您正在捕获所有对产品控制器的根请求视图操作
您可以使用
获取www.example.eu/product-url-1234
产品/视图中的Yii::app()->request->requestUri
但这不是将所有传入请求捕获到单个控制器的好方法,更好的方法如下。
www.example.eu/product/product-url-1234
然后你必须改变配置
'product/<product:.*?>'=>'product/view'
'urlManager' => array(
'urlFormat' => 'path',
'showScriptName' => false,
'rules' => array(
'product/<product:.*?>' => 'product/view',
'post/<id:\d+>/<title:.*?>' => 'post/view',
'posts/<tag:.*?>' => 'post/index',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
),
在您的视图操作中,您可以通过$_GET['product']