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搜索
我做了很多但我找不到有用的东西! 提前致谢!
答案 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