yii2.0 高级版 restful api使用
程序员文章站
2023-03-31 16:16:28
1、复制任意个目录(backend)为api 2、打开api下的main.php 修改 id=>app-api,'controllerNamespace' => 'api\controllers', 'identityClass' => 'app\models\User'(用户认证,暂无用),'er ......
1、复制任意个目录(backend)为api
2、打开api下的main.php 修改 id=>app-api,'controllernamespace' => 'api\controllers', 'identityclass' => 'app\models\user'(用户认证,暂无用),'erroraction' => 'exception/errorr',(修改错误处)
①在components里添加url规则 每添加一个方法必须在此注册
'urlmanager' => [
'enableprettyurl' => true,
'enablestrictparsing' => true,//严格模式
'showscriptname' => false,
'suffix' => '.html', // 后缀,访问方法的后缀
'rules' => [
[
'class' => 'yii\rest\urlrule',
//'pluralize' => false, //设置为false 就可以去掉复数形式了,不然访问控制器得加上s。注意
'controller' => 'api',
'extrapatterns' => [
'get index' => 'index',
'post,get test' => 'test'
]
],
],
],
②自定义返回200,具体格式自己调试 主要有正常返回数据,手动抛出异常、系统异常
'response' => [
'class' => 'yii\web\response',
'on beforesend' => function ($event) {
$response = $event->sender;
if (isset($response->data['message'])){
$response->data = [
// 'success' => $response->issuccessful,
'code' => isset($response->data['code'])?$response->data['code']:500,
// 'message' => $response->statustext,
'info' => isset($response->data['message'])?$response->data['message']:'app error',
];
}
$response->statuscode = 200;
},
],
3、打开common下的bootstrap.php 添加 yii::setalias('@api', dirname(dirname(__dir__)) . '/api');
4、创建控制器继承yii\rest\activecontroller。默认会有一些方法,在父类actions里可以看到,不需要时继承后直接返回空就可以。
5、定义一些行为,自动返回json、跨域等。 用户登录我们是用的redis,所以认证没整太明白
public function behaviors()
{
$behaviors = parent::behaviors();
// $behaviors['authenticator'] = [
// 'class' => compositeauth::classname(),
// 'authmethods' =>
// [
// # 下面是三种验证access_token方式
// //httpbasicauth::classname(),
// //httpbearerauth::classname(),
// //这是get参数验证的方式 # http://10.10.10.252:600/user/index/index?access-token=xxxxxxxxxxxxxxxxxxxx
// queryparamauth::classname(),
// ],
// // 写在optional里的方法不需要token验证
// 'optional' => [],
// ];
// 这个是跨域配置
$behaviors['corsfilter'] = [
'class' => cors::classname(),
'cors' => [
'origin' => ['*'],
'access-control-request-method' => ['post', 'get', 'del'],
'access-control-request-headers' => ['origin', 'x-requested-with', 'content-type', 'accept'],
'access-control-allow-origin' => ['*'],
'access-control-allow-credentials' => true,
'access-control-max-age' => 3600,
'access-control-expose-headers' => ['x-pagination-current-page'],
],
];
#定义返回格式是:json
$behaviors['contentnegotiator']['formats']['text/html'] = response::format_json;
return $behaviors;
}
6、定义自己的错误,就是erroraction配置的方法
class exceptioncontroller extends \yii\web\controller
{
//错误处理
public function actionerror()
{
$exception = \yii::$app->errorhandler->exception;
$code = $exception->statuscode ? $exception->statuscode : $exception->getcode();
//commoncontroller::response( $code ? $code : 400,$exception->getmessage());
return \yii::createobject([
'class' => 'yii\web\response',
'format' => \yii\web\response::format_json,
'data' => [
'code' => $code,
'info' => $exception->getmessage()
],
]);
}
}
7、日志设置 main 下面的components里log。可以设置多个。
在控制器里主要通过设置属性来开启关闭
\yii::$app->log->targets['frontend']->enabled = true;
\yii::$app->log->targets['admin']->enabled = true;
\yii::warning($result,'frontend'); 该方法将手动写入日志
'log' => [
'tracelevel' => yii_debug ? 3 : 0,
'flushinterval' => 1,
'targets' => [
'frontend' => [
'class' => 'yii\log\filetarget',
'levels' => ['error', 'warning'],
'exportinterval' => 1,
'logfile' => '../logs/frontend/'.date('ymd').'.log',
'logvars' => ['_post','_get'], //捕获请求参数
'filemode' => 0775, //设置日志文件权限
'rotatebycopy' => false, //是否以复制的方式rotate
'prefix' => function() { //日志格式自定义 回调方法
if (yii::$app === null) {
return '';
}
$controller = yii::$app->controller->id;
$action = yii::$app->controller->action->id;
return "[$controller-$action]\n";
},
],
'admin' => [
'class' => 'yii\log\filetarget',
'levels' => ['error', 'warning','info'],
'exportinterval' => 1,
'logfile' => '../logs/admin/'.date('ymd').'.log',
'logvars' => ['_post','_get'], //捕获请求参数
'filemode' => 0775, //设置日志文件权限
'rotatebycopy' => false, //是否以复制的方式rotate
],
],
],
8、多数据库配置 在components 里添加配置 默认的id 为db
①添加三个配置
$db = require(__dir__ . '/db.php');
'normal_ios' => $db['normal_ios'],
'normal_android' => $db['normal_android'],
'normal_web' => $db['normal_web'],
②使用的时候指定一个
\yii::$app->normal_ios
\yii::$app->normal_android
\yii::$app->normal_web
$this->find()->where($where)->one(\yii::$app->normal_ios);
\yii::$app->normal_ios->createcommand() ->update($tab,$date,$where)->execute();
③在视图里使用model模型的时候需要注意 重写getdb方法,不然取字段生成表单的时候会报错找不到哪个db
//防止构建表单是出错
public static function getdb()
{
return \yii::$app->normal_web
}
9、设置session
'session' => [
'cookieparams' => ['lifetime' => 3600*24],//有效时间
],
10、nginx配置url支持pathinfo
location ~ \.php$ { #去掉$
root e:/phpstudy/www/tp/public/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$; #增加这一句
fastcgi_param path_info $fastcgi_path_info; #增加这一句
fastcgi_param script_filename $document_root$fastcgi_script_name;
include fastcgi_params;
}
推荐阅读
-
PHP使用百度api实现人脸识别(免费版)
-
使用 Spring Boot 2.0 + WebFlux 实现 RESTful API功能
-
使用 Spring Boot 2.0 + WebFlux 实现 RESTful API功能
-
Python使用Flask实现RESTful API,使用Postman工具、requests库测试接口
-
使用ASP.NET Core 3.x 构建 RESTful API - 5.1 输入验证
-
yii2.0 高级版 restful api使用
-
Javascript之高级数组API的使用实例
-
使用Node.js实现RESTful API的示例
-
使用ASP.NET Core 3.x 构建 RESTful API - 3.4 内容协商
-
使用SpringMVC开发Restful风格的API