zoukankan      html  css  js  c++  java
  • Yii2框架加入API Modules

    一、环境部署

    1. read fucking Yii Documents.

    http://www.yiichina.com/doc/guide/2.0


    2. 了解依赖注入模式

    Java描写叙述:

    http://blog.csdn.net/taijianyu/article/details/2338311/


    3. 使用advanced模板部署Yii2

    https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/start-installation.md

    # 一定要注意要运行init命令进行配置,仅仅有运行了该命令,才会从environments文件夹下将dev或prod环境的配置信息和例子配置进入project,才干够測试是否可用。

    4. 測试例子能否使用。不能使用从头检查。

    二、模块配置

    1. 在advanced文件夹下,创建api文件夹,将frontend或backend模块下全部文件复制过来

    2. 配置api的别名,假设不配置这样。就须要设置非常长的全名。easy出错还麻烦。

    advanced/common/config/bootstrap.php修改成例如以下样子:

    <?php
    Yii::setAlias('@common', dirname(__DIR__));
    Yii::setAlias('@frontend', dirname(dirname(__DIR__)) . '/frontend');
    Yii::setAlias('@backend', dirname(dirname(__DIR__)) . '/backend');
    Yii::setAlias('@api', dirname(dirname(__DIR__)) . '/api');  \ 新加入别名
    Yii::setAlias('@console', dirname(dirname(__DIR__)) . '/console');

    3. 配置api模块里的main.php配置文件

    <?

    php $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') ); return [ 'id' => 'app-api', 'basePath' => dirname(__DIR__), 'bootstrap' => ['log'], 'modules' => [ \ 加入模块v1和v2,分别表示不同的版本号 'v1' => [ 'class' => 'apimodulesv1Module' ], 'v2' => [ 'class' => 'apimodulesv2Module' ] ], 'controllerNamespace' => 'apicontrollers', 'components' => [ 'user' => [ 'identityClass' => 'commonmodelsUser', 'enableAutoLogin' => false, // API change to false 'enableSession' => false, // API ++ 'loginUrl' => null // API ++ ], 'log' => [ 'traceLevel' => YII_DEBUG ?

    3 : 0, 'targets' => [ [ 'class' => 'yiilogFileTarget', 'levels' => ['error', 'warning'], ], ], ], 'errorHandler' => [ 'errorAction' => 'site/error', ], // 'urlManager' => [ // 'enablePrettyUrl' => true, // 启用美化URL // 'enableStrictParsing' => true, // 是否运行严格的url解析 // 'showScriptName' => false, // 在URL路径中是否显示脚本入口文件 // 'rules' => [ // [ // 'class' => 'yii estUrlRule', // 'controller' => [ // 'v1/site' // ] // ], // [ // 'class' => 'yii estUrlRule', // 'controller' => [ // 'v2/site' // ] // ] // ] // ], ], 'params' => $params, ];


    # 该main.php文件在创建应用时作为配置项构造应用实例。

    简而言之,让应用知道我们加入了两个模块:v1和v2


    4. 依据main.php里修改知道,我们的模块路径为:apimodulesv1Module,那就创建它吧。

        1> 在api文件夹下创建modules文件夹,在modules文件夹下创建v1文件夹。v2文件夹

        2> 在v1和v2文件夹下分别创建Module.php文件,内容例如以下:

    <?php
    namespace apimodulesv1;
    
    class Module extends yiiaseModule
    {
        public $controllerNamespace = 'apimodulesv1controllers';
        public function init()
        {
            parent::init();
    
            // ...  其它初始化代码 ...
        }
    }
    ?>
    # 两处红色部分依据你是v1,还是v2分别不同。代码意思是。要通过依赖注入时要有这个类。没有这个类,在运行时会报:依赖注入找不到该类错误。


    5. 完整Modules中的文件夹结构

    在v1和v2文件夹下分别创建:controllers,models。views文件夹,这个不用多说了吧。MVC,MVC。

    为了有个默认的接口返回信息。我们依照frontend的文件夹结构,在controllers文件夹下创建一个SiteController.php

    <?php
    namespace apimodulesv1controllers;
    use yii
    estController;
    class SiteController extends ActiveController
    {
        public function actionIndex()
        {
               Yii::$app->response->format = yiiwebResponse::FORMAT_JSON;
               return [
                   'message' => 'API test Ok!',
                   'code' => 100,
               ];
        }
    }
    
    
    ?>
    # 没什么好说的,就是返回JSON信息。

    假设你实在不愿意使用SiteController.php,也就是说不想用site这个控制器ID。你能够在api/index.php中加入一行代码:

    <?php
    defined('YII_DEBUG') or define('YII_DEBUG', true);
    defined('YII_ENV') or define('YII_ENV', 'dev');
    
    require(__DIR__ . '/../../vendor/autoload.php');
    require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
    require(__DIR__ . '/../../common/config/bootstrap.php');
    require(__DIR__ . '/../config/bootstrap.php');
    
    $config = yiihelpersArrayHelper::merge(
        require(__DIR__ . '/../../common/config/main.php'),
        require(__DIR__ . '/../../common/config/main-local.php'),
        require(__DIR__ . '/../config/main.php'),
        require(__DIR__ . '/../config/main-local.php')
    );
    
    $application = new yiiwebApplication($config);
    $application->defaultRoute = 'v1/hello';
    $application->run();
    

    然后在v1/controllers/下创建一个新的HelloController.php:
    <?

    php namespace apimodulesv1controllers; use yiiwebController; class HelloController extends Controller { public function actionIndex() { Yii::$app->response->format = yiiwebResponse::FORMAT_JSON; return [ 'message' => 'API test Ok!', 'code' => 100, ]; } } ?>

    默认即可调用这个路由:v1/hello/index

    以上

  • 相关阅读:
    转载别人(ZZ)创建要素集
    CAD转化为Shp
    VBS学习
    3度带/6度带
    头文件学习,GEOTIFF
    arcmap vba 生成3维侧棱 以及 createfeature与createfeaturebuffer的区别
    另类
    幸福人生讲座(七):怎样引导孩子立志
    幸福人生讲座(四):孝道与仁爱是根本
    幸福人生讲座(二):人生怎样才能幸福?
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7352965.html
Copyright © 2011-2022 走看看