【问题标题】:url manager restful api in yii2yii2中的url管理器restful api
【发布时间】:2015-09-01 07:19:31
【问题描述】:

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 search

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

【问题讨论】:

    标签: php .htaccess yii2 restful-url


    【解决方案1】:

    有了这个规则:

    '<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>',
    

    并将其设置为第一条规则。记得改actionName

    【讨论】:

    猜你喜欢
    • 2017-04-17
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 2013-11-24
    • 1970-01-01
    相关资源
    最近更新 更多