网址管理员yii2中的restful api

时间:2015-09-01 07:19:31

标签: php .htaccess yii2 restful-url

1.如何制作此网址

http://localhost/travia-api/backend/web/v1/flight?id=4FR996IN2F829M

到这个

http://localhost/travia-api/backend/web/v1/flight/4FR996IN2F829M

这是我的配置

  'urlManager' => [
        'class' => 'yii\web\UrlManager',
        'showScriptName' => false,
        'enablePrettyUrl' => true,
        'rules' => [
            'class' => 'yii\rest\UrlRule',
            'controller' => 'flight',

            '<controller:\w+>/<id:\d+>' => '<controller>/view',
            '<controller:[\w\-]+>/<action:[\w\-]+>/<id:\d+>' => '<controller>/<action>/view',
            '<controller:[\w\-]+>/<action:[\w\-]+>/<id:\d+>' => '<controller>/<action>',
           '<controller:[\w\-]+>/<action:[\w\-]+>' => '<controller>/<action>',
           'v1/<controller:[\w\-]+>/<action:[\w\-]+>/<id:\d+>' => 'v1/<controller>/<action>',
           'v1/<controller:[\w\-]+>/<action:[\w\-]+>' => 'v1/<controller>/<action>',
           'module/<module:[\w\-]+>/<controller:[\w\-]+>/<action:[\w\-]+>' => '<module>/<controller>/<action>',
        ],

这是我的htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

2.当我想添加新模式时,我将这些行添加到配置

extraPatterns[
   'GET search' => 'search'
]

之后我有这样的错误

  

未知属性 - yii \ base \ UnknownPropertyException   设置未知属性:yii \ web \ UrlRule :: GET搜索

我做了很多但我找不到有用的东西! 提前致谢!

1 个答案:

答案 0 :(得分:0)

遵守这条规则:

'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:[\w\-]+>/<action:[\w\-]+>/<id:\d+>' => '<controller>/<action>/view',
'<controller:[\w\-]+>/<action:[\w\-]+>/<id:\d+>' => '<controller>/<action>',

您只会在id上获取数字,并尝试获取字词:

'<controller:\w+>/<id:\d+\w+>' => '<controller>/view',
'<controller:[\w\-]+>/<action:[\w\-]+>/<id:\d+\w+>' => '<controller>/<action>/view',
'<controller:[\w\-]+>/<action:[\w\-]+>/<id:\d+\w+>' => '<controller>/<action>',

因为你想要数字和单词:

http://localhost/travia-api/backend/web/v1/flight/4FR996IN2F829M

我不知道如何正确解决第二个问题,但试试这个:

extraPatterns[
   'GET{id}' => 'search'
]

我看到它here

修改

更改此规则:

'v1/<controller:[\w\-]+>/<action:[\w\-]+>/<id:\d+>' => 'v1/<controller>/<action>',
'v1/<controller:[\w\-]+>/<action:[\w\-]+>' => 'v1/<controller>/<action>',

为此:

'v1/flight/<id:[\d+\w+]>' => 'v1/flight/actionName',
'v1/flight/<action:\w+' => 'v1/flight/<action>',

并将setit作为第一条规则。请务必更改actionName