Yii2使用OPTIONS请求休息自定义操作

时间:2018-01-16 13:29:46

标签: rest api yii2

我正在研究api到目前为止它只在Postman中测试过,所以cors不是问题。然而,现在正在开发前端,当谈到自定义Yii操作时,它们正在使预检请求失败。我通过将这些行添加到url-manager config来解决这个问题:

 [
        'class' => 'yii\rest\UrlRule',
        'controller' => ['v1/call-rates'],
        'pluralize' => false,
        'extraPatterns' => [
            'OPTIONS' => 'options',
            'GET all-resellers' => 'all-resellers',
            'POST updatefromcsv' => 'updatefromcsv',
            'OPTIONS all-resellers' => 'options',
            'OPTIONS updatefromcsv' => 'options',
            // other end points....
        ],

因此每个自定义操作都必须具有相应的OPTIONS模式。我在类似的问题上看到,可以将OPTIONS模式应用于一行中的所有自定义操作,如下所示:

 [
        'class' => 'yii\rest\UrlRule',
        'controller' => [
            'v1/call-rates',
            // rest of controllers... 
        ],
        'pluralize' => false,
        'extraPatterns' => [
            'OPTIONS <action:\w+>' => 'options',
        ],
    ],

然而,这是行不通的。我也尝试过这样的令牌:

  [
        'class' => 'yii\rest\UrlRule',
        'controller' => [
            'v1/call-rates'
        ],
        'tokens' => [
            '{action}' => '<action:\\w+>',
        ],
        'pluralize' => false,
        'extraPatterns' => [
            'OPTIONS {action}' => 'options',
        ],
    ],

但又没有运气。任何帮助,将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:0)

通过在urlmanager config中添加以下内容来解决:

 [
        'class' => 'yii\rest\UrlRule',
        'controller' => [
            'v1/call-rates',
            'v1/call-recordings',
        ],
        'tokens' => [
            '{action}' => '<action:[a-zA-Z0-9\\-]+>',
        ],
        'pluralize' => false,
        'extraPatterns' => [
            'OPTIONS {action}' => 'options',
            'OPTIONS' => 'options'
        ],
    ],

因为我的自定义操作命名为:

public function actionGetResellers

网址为get-resellers,因此模式不正确,因为它不接受-。那么现在我添加的控制器将为每个自定义操作添加OPTIONS模式

答案 1 :(得分:0)

我使用正则表达式<action:\w+-\w+>。解决方法如下:

[
        'class' => 'yii\rest\UrlRule', //
        'controller' => 'v1/content/my',
        'pluralize' => false,
        'extraPatterns' => [
            'OPTIONS <action:\w+-\w+>' => 'options',
            'GET foot-print' => 'foot-print', 
            'GET my-courses' => 'my-courses',
        ]