本處以apache為例,查看apache的conf目錄下httpd.conf,找到下面的代碼
LoadModule rewrite_module modules/mod_rewrite.so
將其前面的#去掉,如果沒有找到則添加進去。
找到一下代碼
<Directory "C:/phpStudy/Apache/cgi-bin"> AllowOverride All Options None Require all granted</Directory>
將原本的AllowOverride None改為AllowOverride All。
然后在站點根目錄下創建一個.htaccess文件,內容如下:

<IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule . index.php</IfModule>.htaccess此處不再贅述yii2的配置,如果需要可以看YII2實戰手冊。
YII2實際操作:1、配置URL規則及modules
(1)新建modules文件夾,實行api接口版本控制。例如V1版本、V2版本……
在v1文件夾下新建controllers文件夾(控制器)、models文件夾(模型)、Module.php配置文件。
Module.php文件如下:
1 <?php 2 namespace api/modules/v1; 3 4 class Module extends /yii/base/Module 5 { 6 7 public $controllerNamespace = 'api/modules/v1/controllers'; 8 9 public function init()10 {11 parent::init();12 }13 }第2行和第7行隨版本擴展而變化(v1->v2...)。
(2)配置config文件夾下的main.php文件

1 <?php 2 $params = array_merge(require (__DIR__ . '/../../common/config/params.php'), require (__DIR__ . '/../../common/config/params-local.php'), require (__DIR__ . '/params.php'), require (__DIR__ . '/params-local.php')); 3 4 return [ 5 'id' => 'app-api', 6 'basePath' => dirname(__DIR__), 7 'bootstrap' => [ 8 'log' 9 ],10 'modules' => [11 'v1' => [12 'class' => 'api/modules/v1/Module'13 ],14 'v2' => [15 'class' => 'api/modules/v2/Module'16 ]17 ],18 'controllerNamespace' => 'api/controllers',19 'components' => [20 'user' => [21 'identityClass' => 'common/models/User',22 'enableAutoLogin' => false,23 'enablesession' => false,24 'loginUrl' => null25 ],26 'urlManager' => [27 'enablemain.php注意10~17行、20~44行的組件配置,相信大家仔細閱讀就能明白,此處不再贅述原理,請大家尤其注意33~35行的代碼,此處表示的是v1/site控制器,隨著接口控制器的增多,可以直接在數組中增加即可。本文力求快速配置出RESTful架構的實現。
(3)v2、v3表示以后的版本變化,配置都類似于v1文件夾。
2、創建一個模型數據庫準備一個名為mxq_guide的數據表
CREATE TABLE `mxq_guide` ( `id` int(11) NOT NULL AUTO_INCREMENT, `imgurl` varchar(255) DEFAULT NULL COMMENT '圖片路徑', `status` int(11) DEFAULTNULL COMMENT '1啟用 0禁用', `flag` int(11) DEFAULTNULL COMMENT '1安卓 2蘋果', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=24 DEFAULT CHARSET=utf8 COMMENT='APP導航圖';創建后請注意及時往數據庫添加幾條數據信息。
通過腳手架gii來創建guide.php模型(使用方法請看yii2權威指南)。生成后的文件注意改寫,修改為如下形式以滿足RESTful的需求。之后從models文件夾中轉移到v1/models文件夾中,并注意命名空間的修改。
1 <?php 2 namespace api/modules/v1/models; 3 4 use Yii; 5 use yii/db/ActiveRecord; 6 use yii/web/IdentityInterface; 7 8 /** 9 * This is the model class for table "{{%guide}}".10 *11 * @property integer $id12 * @property string $imgurl13 * @property integer $status14 * @property integer $flag15 */16 class Guide extends ActiveRecord implements IdentityInterface17 {18 19 public static function findIdentityByAccessToken($token, $type = null)20 {21 return static::findOne([22 'access_token' => $token23 ]);24 }25 26 public function getId()27 {28 return $this->id;29 }30 31 public function getAuthKey()32 {33 return $this->authKey;34 }35 36 public function validateAuthKey($authKey)37 {38 return $this->authKey === $authKey;39 }40 41 public static function findIdentity($id)42 {43 return static::findOne($id);44 }45 46 public static function tableName()47 {48 return '{{%guide}}';49 }50 51 public function rules()52 {53 return [54 [55 [56 'imgurl',57 'status',58 'flag'59 ],60 'required'61 ],62 [63 [64 'status',65 'flag'66 ],67 'integer'68 ],69 [70 [71 'imgurl'72 ],73 'string',74 'max' => 25575 ]76 ];77 }78 79 public function attributeLabels()80 {81 return [82 'id' => Yii::t('app', 'ID'),83 'imgurl' => Yii::t('app', 'imgurl'),84 'status' => Yii::t('app', 'status'),85 'flag' => Yii::t('app', 'flag')86 ];87 }88 }guide.php3、創建一個控制器1 <?php 2 namespace api/modules/v1/controllers; 3 4 use Yii; 5 use yii/rest/ActiveController; 6 use yii/filters/auth/CompositeAuth; 7 use yii/filters/auth/QueryParamAuth; 8 use yii/data/ActiveDataProvider; 9 10 class SiteController extends ActiveController11 {12 13 public $modelClass = 'api/modules/v1/models/guide';14 15 public $serializer = [16 'class' => 'yii/rest/Serializer',17 'collectionEnvelope' => 'items'18 ];19 20 // public function behaviors()21 // {22 // $behaviors = parent::behaviors();23 // $behaviors['authenticator']
新聞熱點
疑難解答