我正在研究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',
],
],
但又没有运气。任何帮助,将不胜感激。提前谢谢。
答案 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',
]