如何将字符串放在yii2中的url路由规则中?

时间:2015-12-02 16:22:29

标签: php routing yii2 yii-url-manager

在yii2我有控制器:

public function actionRequest($date) {
...
}

我需要网址request/2015-12-03而不是request?date=2015-12-03

那么,如果是字符串或日期,如何从路由获取日期?这不起作用(找不到页面): 'user/request/<date:\w+>' => 'user/request'

奇怪的是,viewupdatedelete行动效果很好。网址request?date=2015-12-03也有效。我使用Apache服务器。 main.php:

'components' => [
        'request' => [
            'baseUrl' => '',
        ],
        'urlManager' => [
            'baseUrl' => '',
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                'user/view/<id:\d+>' => 'user/view', // works
                'user/update/<id:\d+>' => 'user/update', // works
                'user/delete/<id:\d+>' => 'user/delete', // works
                'user/request/<date:\d{4}-\d{2}-\d{2}>' => 'user/request', // doesn't work
                'user/request/<date:\w+>' => 'user/request', // doesn't work
                [
                    'pattern' => 'login',
                    'route' => 'user/login',
                ],
                [
                    'pattern' => 'logout',
                    'route' => 'user/logout',
                ],
            ],
        ],
        ...
]

.htaccess来自这篇文章http://www.yiiframework.com/wiki/755/how-to-hide-frontend-web-in-url-addresses-on-apache/ root中的.htaccess:

Options -Indexes

<IfModule mod_rewrite.c> 
  RewriteEngine on

  RewriteCond %{REQUEST_URI} !^public
  RewriteRule ^(.*)$ frontend/web/$1 [L] 
</IfModule>

# Deny accessing below extensions
<Files ~ "(.json|.lock|.git)">
Order allow,deny
Deny from all
</Files>

# Deny accessing dot files
RewriteRule (^\.|/\.) - [F]

.htaccess in / frontend / web:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule . index.php

1 个答案:

答案 0 :(得分:3)

日期的正则表达式必须像这样

<date:\d{4}-\d{2}-\d{2}>