最近我需要做一个大项目中的一个模块,考虑用前后端分离,所以想自己搭建一套基于Yii2.0的restful接口出来,本来的时候老大想让我用spring boot,无奈我太菜只会php.....
教程开始:
先说下我的目录接口
|-admin-lte 后台 |-api 接口 |-yii-advanced Yii源码
这样的通过引入的方式使用Yii,可以节省服务器的存储空间;
1、和yii源码建立api文件夹
2、建立如下文件目录
├─config │ bootstrap.php │ db.php │ main-local.php │ main.php │ params.php │ ├─modules │ └─v1 │ │ Module.php │ │ │ ├─controllers │ └─models └─web index.php
web目录下建立index.php引入yii源码
<?php defined ( 'YII_DEBUG' ) or define ( 'YII_DEBUG', true ); defined ( 'YII_ENV' ) or define ( 'YII_ENV', 'dev' ); require (__DIR__ . '/../../yii2-advanced/vendor/autoload.php'); require (__DIR__ . '/../../yii2-advanced/vendor/yiisoft/yii2/Yii.php'); require (__DIR__ . '/../../yii2-advanced/common/config/bootstrap.php'); require (__DIR__ . '/../config/bootstrap.php'); $config = yii\helpers\ArrayHelper::merge ( require (__DIR__ . '/../../yii2-advanced/common/config/main.php'), require (__DIR__ . '/../config/main.php'), require (__DIR__ . '/../config/main-local.php') ); $application = new yii\web\Application ( $config ); $application->run ();
main.php中配置
return [ 'id' => 'app-back-admin', 'language' => 'zh-CN', 'basePath' => dirname(__DIR__), 'bootstrap' => ['log'], 'defaultRoute' => 'site/login', 'controllerNamespace' => 'app\modules\v1\controllers', 'components' => [ 'user' => [ 'identityClass' => 'app\models\Operators', 'enableAutoLogin' => true, ], //api接收json格式数据,一定要配置 'request' => [ 'cookieValidationKey' => 'ax5Ajm6GbpGhhmNX2lAnAfgwMj2RO2Cq', 'parsers' => [ 'application/json' => 'yii\web\JsonParser', ] ], //本地日志 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error'], 'logFile' => "@app/runtime/log-" . date('Y-m-d'). '.log' ], ], ], //配置路由,如果你要restful风格需要配置,如果配置了此项不配置重写规则会404 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, ], //数据库 'db' => require(__DIR__ . '/db.php') ], //这个是模块名,比如你的app升级的话,可以建立v2,新版本用v2,老版本用v1,这样就比较清晰 'modules' => [ 'v1' => [ 'class' => 'app\modules\v1\Module', ], ], 'params' => $params, ];
这时候可以考虑使用gii生成大体的配置
然后在modules里面配置model和controller就可以了
最重要的几点:
1、请让控制器继承ActiveController
2、如果你是apache用户,请在index.php同级建立.htaccess文件
Options +FollowSymLinks IndexIgnore / RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
上面的意思是,如果你请求的目录存在,就直接访问,如果不存在,也要交给index.php
3、如果你是nginx用户,那你就需要修改你的nginx配置了,大体差不多,这块我没试
可能我描述的不是很清楚,大家可以去找代码,传送门