• Yii2框架添加API Modules


    原文链接:http://www.itnose.net/detail/6459353.html ;

    一、环境部署

    1. read fucking Yii Documents.

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

    2. 了解依赖注入模式

    Java描述:

    3. 使用advanced模板部署Yii2

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

    # 一定要注意要执行init命令进行配置,只有执行了该命令,才会从environments目录下将dev或prod环境的配置信息和样例配置进入工程,才可以测试是否可用。

    4. 测试样例是否能使用,不能使用从头检查。

    二、模块配置

    1. 在advanced目录下,创建api目录,将frontend或backend模块下所有文件复制过来

    2. 配置api的别名,如果不配置这样,就需要设置很长的全名,容易出错还麻烦。

    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 ;

  • 相关阅读:
    android 权限大全
    Android限定EditText的输入类型为数字或者英文(包括大小写),EditText,TextView只能输入两位小数
    Android Application 对象介绍
    数据库关键字
    SQLite数据库增删改查操作
    【转】html之<meta> 标签
    javascript剔除数组重复元素的简单方法
    jQuery性能最佳实践
    css学习笔记
    【转】必须避免的html标签十宗罪
  • 原文地址:https://www.cnblogs.com/jerrypro/p/6597644.html
Copyright © 2020-2023  润新知