yii2中restful url访问配置,控制器编写 返回数据处理

weixin_38064768 2019-09-11 03:50:10
yii2 中restful url访问配置虽然官网权威指南有,但是按着配置总很多问题, 哪位网友这块使用有什么好的方法请此处分享下,谢谢。我此处遇到点问题,有知道的麻烦回复下,感谢 'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => false, 'showScriptName' => false, 'rules' => [ /*['class' => 'yii\rest\UrlRule', 'controller' => ['sysuser', 'news']],*/ [ 'class' => 'yii\rest\UrlRule', 'controller' => [ 'api/sysuser' ,'sysuser'], 'tokens' => [ '{id}' => '<id:\\w+>' ], /* 'except' => ['delete', 'create', 'update'], 'extraPatterns' => [ 'GET test' => 'test', ], */ ], '<controller:\w+>/<id:\d+>' => '<controller>/view', '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>', '<controller:\w+>/<action:\w+>' => '<controller>/<action>', ], ], 我的配置, 'enableStrictParsing' => false,如果设置成true, 则url后面带/等符号或字母数字都会找不到, 我的问题是怎么覆盖actions,权威只能有如何去掉有如何覆盖方法,就是没写如何使我的控制器中的action来响应 请求,比如我控制器中有一个view的action,它不会响应,而是yii\rest\ViewAction在响应,增加自己独有的action 如何编写url?如何自定义自己返回的数据内容及其格式,我使用了 public function behaviors() { $behaviors = parent::behaviors(); $behaviors['authenticator'] = [ 'class' => CompositeAuth::className(), 'authMethods' => [ HttpBasicAuth::className(), HttpBearerAuth::className(), QueryParamAuth::className(), ], ]; $behaviors['contentNegotiator'] =[ 'class' => ContentNegotiator::className(), 'formats' => [ 'application/json' => Response::FORMAT_JSON, 'application/xml' => Response::FORMAT_XML, ], ]; return $behaviors; } 发现 C:\Users\Administrator>curl -i -H "Accept:application/json" "http://www.dapi.com/api/sysusers?access-token=100-token"倒是可以,但有时候会返回数组,比如访问update 还有beforeAction我这边也有问题,如果打开以下代码,会直接报错,说返回内容错误什么的 public function beforeAction($event) { $action = $event->id; echo $action; if (isset($this->actions[$action])) { $verbs = $this->actions[$action]; print_r($verbs); } elseif (isset($this->actions['*'])) { $verbs = $this->actions['*']; echo $action."bbb" ;exit(); } else { echo $action."xxx" ;exit(); return $event->isValid; } $verb = Yii::$app->getRequest()->getMethod(); $allowed = array_map('strtoupper', $verbs); if (!in_array($verb, $allowed)) { $this->setHeader(400); echo json_encode(array('status'=>0,'error_code'=>400,'message'=>'Method not allowed'),JSON_PRETTY_PRINT); exit; } // return true; } */ public function actions() { return [ 'index' => [ 'class' => 'yii\rest\IndexAction', 'modelClass' => $this->modelClass, 'checkAccess' => [$this, 'checkAccess'], ], 'view' => [ 'class' => 'yii\rest\ViewAction', 'modelClass' => $this->modelClass, 'checkAccess' => [$this, 'checkAccess'], ], 'create' => [ 'class' => 'yii\rest\CreateAction', 'modelClass' => $this->modelClass, 'checkAccess' => [$this, 'checkAccess'], 'scenario' => $this->createScenario, ], 'update' => [ 'class' => 'yii\rest\UpdateAction', 'modelClass' => $this->modelClass, 'checkAccess' => [$this, 'checkAccess'], 'scenario' => $this->updateScenario, ], 'delete' => [ 'class' => 'yii\rest\DeleteAction', 'modelClass' => $this->modelClass, 'checkAccess' => [$this, 'checkAccess'], ], 'options' => [ 'class' => 'yii\rest\OptionsAction', ], ]; }
...全文
77 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38065217 2019-09-11
  • 打赏
  • 举报
回复
['class' => 'yii\rest\UrlRule', 'controller' => 'news', 'pluralize' => false, 'extraPatterns' => [ 'GET search' => 'search', ], ], 这样就可以增加一个支持GET的actionSearch
weixin_38067400 2019-09-11
  • 打赏
  • 举报
回复
HttpBasicAuth通过如下两种方式取值 有一个auth属性是自定义的回调验证方法,需要接收username或password或两者,验证成功需要返回identity 没有auth时,一定要有username,当作accessToken通过$user->loginByAccessToken验证, $_SERVER['PHP_AUTH_USER'],//以PHP开头,在apache下没法直接获取,前面加了HTTP_,我测试时改源码处理的 $username = $request->getAuthUser(); //$_SERVER['PHP_AUTH_PWD'] $password = $request->getAuthPassword(); HttpBearerAuth //Authorization,在header中设定获取 $authHeader = $request->getHeaders()->get('Authorization'); $user->loginByAccessToken QueryParamAuth //获取get参数,默认:access-token $accessToken = $request->get($this->tokenParam); $user->loginByAccessToken
weixin_38098679 2019-09-11
  • 打赏
  • 举报
回复
这个内容我写完了,谁要是有问题可以找我。

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧