我希望我的网址有以下模式:
http://example.com/controller/view_id/title_name, like SO:
http://stackoverflow.com/question/1/title
Config.php:
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'appendParams' => true,
'rules'=>array(
'user/<id:\d+>/<name:\w+>'=>array('user/view', 'caseSensitive'=>false),
'<controller>/<id:\d+>/<name:.*?>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
)
UserController中:
public function actionView($id)
{
$this->render('view', array(
'model' => $this->loadModel($id),
));
}
我正在尝试将user/view/1
重定向到user/1/my_username
网址user/1/username
正在将我重定向到Error 400 invalid request
。
我错过了什么?
答案 0 :(得分:2)
如果您的用户和问题控制器有action view
。此处视图应该是操作的名称。
试试这个:
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'appendParams' => true,
'caseSensitive'=>false,//use case sensitivity here
'rules'=>array(
'<controller>/<view_id:\d+>/<title_name:[\w -\.]+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
)
如果你的网址是这样的
http://stackoverflow.com/question/1/title
当您点击此url.In main.php时,此行将显示您的网址。
'<controller>/<view_id:\d+>/<title_name:[\w -\.]+>'=>'<controller>/view',
//view_id and title_name you can change there name.
它会像这样工作:
<controller>=question
<view_id:\d+>=1
<title_name:[\w -\.]+>=title
您将自动重定向到<controller>
function actionView()
。您可以在actionView()中获取此$_GET['view_id']
和$_GET['title_name']
的网址值。< / p>
你必须这样做:
public function actionView()
{
$this->render('view', array( 'model' => $this->loadModel($_GET['view_id'])));
}