yii2中restful url访问配置,控制器编写 返回数据处理
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',
],
];
}