yii2配置api模块

麒麟Kylin V10系统yum源更换教程:从阿里云到本地源全攻略 在Linux服务器运维中,软件源是系统安装与更新效率的基石。掌握yum源配置原理,能帮助运维人员快速解决下载慢、安装超时等常见问题。以国产操作系统银河麒麟Kylin V10为例,其基于RPM体系并与RHEL/CentOS兼容,通过调整仓库地址即可实现第三方镜像源的无缝接入。理解repodata元数据、baseurl路径规则及gpgkey校验机制,是配置稳定软件源的核心。阿里云、清华TUNA等国内镜像站提供高带宽与同步服务,能显著提升软件包获取速度。除在线换源外,还可配置EPEL扩展仓库丰富软件生态,或利用I 阅读详情

1、在项目下添加目录weChatApi
2、在common/config/bootstrap.php文件添加一行代码:
Yii::setAlias( '@weChatApi' , dirname( dirname( __DIR__ ) ) . '/weChatApi' );
3、在weChatApi里面创建如下目录:
在这里插入图片描述
4、修改/etc/nginx/conf.d/default.conf添加如下代码:

    location /BlackCard/weChatApi/web/ {
        index  index.html index.htm index.php;
        try_files $uri $uri/ /BlackCard/weChatApi/web/index.php?$query_string;
    }

重启nginx服务:systemctl reload nginx
5、在weChatApi添加目录:runtime,命令如下:

mkdir runtime
chmod 777 runtime

6、各个文件的代码如下:
ApiController.php:

<?php

namespace weChatApi\base\controllers;

use yii\filters\auth\HttpBasicAuth;
use yii\rest\ActiveController;
use Yii;

/**
 * restful api 底层控制器
 * Class ApiController
 * @package weChatApi\base\controllers
 */
class ApiController extends ActiveController
{

    /**
     * 操作成功标示码
     */
    const ACTION_SUCCESS_CODE = 1;

    /**
     * 操作失败标示码
     */
    const ACTION_FAIL_CODE = 0;

    /**
     * 开发的权限
     * @var array
     */
    private $allowedApis = [
        'user/login' ,
    ];

    /**
     * 关闭csrf验证
     * @var bool
     */
    public $enableCsrfValidation = false;

    /**
     * 验证授权
     *
     * @param array $optional
     *
     * @return array
     */
    public function behaviors( $optional = [] )
    {
        $behaviors = parent::behaviors();
        $behaviors[ 'authenticator' ] = [
            'class' => HttpBasicAuth::className() ,
        ];
        return $behaviors;
    }

    /**
     * 重写
     *
     * @param $action
     *
     * @return bool
     * @throws \yii\web\BadRequestHttpException
     */
    public function beforeAction( $action )
    {
        if ( $this->isAllowedApi() ) {
            return true;
        }
        parent::beforeAction( $action );
        return true;
    }

    /**
     * 注销自带的 rest
     * @return array
     */
    public function actions()
    {
        $actions = parent::actions();
        unset(
            $actions[ 'index' ] ,
            $actions[ 'update' ] ,
            $actions[ 'create' ] ,
            $actions[ 'delete' ]
        );
        return $actions;
    }

    /**
     * 验证是否是开发的接口请求
     * @return bool
     */
    private function isAllowedApi()
    {
        $controllerId = Yii::$app->controller->id;
        $action = Yii::$app->controller->action->id;
        $requestApi = $controllerId . '/' . $action;
        return in_array( $requestApi , $this->allowedApis );
    }

    /**
     * 操作成功
     *
     * @param array  $data
     * @param int    $count
     * @param string $msg
     *
     * @return array
     */
    public function success( $data = [] , $count = 0 , $msg = '操作成功' )
    {
        return [
            'code' => self::ACTION_SUCCESS_CODE ,
            'message' => $msg ,
            'count' => $count ,
            'data' => $data ,
        ];
    }

    /**
     * 操作失败
     *
     * @param string $msg
     * @param array  $data
     * @param int    $count
     *
     * @return array
     */
    public function fail( $msg = '操作失败' , $data = [] , $count = 0 )
    {
        return [
            'code' => self::ACTION_FAIL_CODE ,
            'message' => $msg ,
            'count' => $count ,
            'data' => $data ,
        ];
    }
}

bootstrap.php:

<?php

main.php:

<?php
$params = array_merge(
    require __DIR__ . '/../../common/config/params.php' ,
    require __DIR__ . '/../../common/config/params-local.php' ,
    require __DIR__ . '/params.php'
);
return [
    'id' => 'app-weChatApi' ,
    'basePath' => dirname( __DIR__ ) ,
    'language' => 'zh-CN' ,
    'controllerNamespace' => 'weChatApi\controllers' ,
    'bootstrap' => [ 'log' ] ,
    'timeZone' => 'Asia/Shanghai' ,
    'modules' => [
        'v1' => [
            'class' => 'weChatApi\modules\v1\Module' ,
        ] ,
    ] ,
    'components' => [
        'response' => [
            'class' => 'yii\web\Response' ,
            'on beforeSend' => function ( $event ) {
                $response = $event->sender;
                $response->format = \yii\web\Response::FORMAT_JSON;
                $statusCode = $response->statusCode;
                switch ( $statusCode ) {
                    case 200 :
                        $returnData = $response->data;
                        break;
                    case 401 :
                        $returnData = [
                            'code' => 401 ,
                            'message' => '没有权限' ,
                            'count' => 0 ,
                            'data' => [] ,
                        ];
                        break;
                    case 404 :
                        $returnData = [
                            'code' => 0 ,
                            'message' => '接口不存在' ,
                            'count' => 0 ,
                            'data' => [] ,
                        ];
                        break;
                    default:
                        $returnData = [
                            'code' => 0 ,
                            'message' => '500错误' ,
                            'count' => 0 ,
                            'data' => [] ,
                        ];
                        break;
                }
                $response->data = $returnData;
                $response->statusCode = 200;
            } ,
        ] ,
        'request' => [
            'csrfParam' => '_csrf-backend' ,
            'cookieValidationKey' => 's2LK6wSyyrvMAyJUHBOJn2RRrThtIQ7E' ,
        ] ,
        'user' => [
            'identityClass' => 'weChatApi\Authentication' ,
            'enableAutoLogin' => false ,
            'enableSession' => false ,
            'loginUrl' => null ,
            //'identityCookie' => [ 'name' => '_identity-adminApi' , 'httpOnly' => true ] ,
        ] ,
        'session' => [
            // this is the name of the session cookie used for login on the backend
            'name' => 'BlackCard-weChatApi' ,
        ] ,
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0 ,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget' ,
                    'levels' => [ 'error' , 'warning' ] ,
                ] ,
            ] ,
        ] ,
        'urlManager' => [
            'enablePrettyUrl' => true ,
            'showScriptName' => false ,
            'enableStrictParsing' => true ,
            'rules' => [
                [
                    'pluralize' => false ,
                    'class' => 'yii\rest\UrlRule' ,
                    'controller' => [ 'public' ] ,
                    'extraPatterns' => [
                        'GET index' => 'index' ,
                    ] ,
                ] ,
                //测试模块
                [
                    'pluralize' => false ,
                    'class' => 'yii\rest\UrlRule' ,
                    'controller' => [ 'v1/user' ] ,
                    'extraPatterns' => [
                        'POST login' => 'login',
                    ] ,
                ] ,
            ] ,
        ] ,
    ] ,
    'params' => $params ,
];

params.php:

<?php
return [];

PublicController.php:

<?php

namespace weChatApi\controllers;

use weChatApi\base\controllers\ApiController;

/**
 * 公共控制器
 * Class PublicController
 * @package adminApi\controllers
 */
class PublicController extends ApiController
{

    /**
     * 默认方法
     * @return array
     */
    public function actionIndex()
    {
        return $this->success();
    }
}

UserController.php:

<?php

namespace weChatApi\modules\v1\controllers;

use weChatApi\base\controllers\ApiController;

/**
 * 用户控制器
 * Class UserController
 * @package weChatApi\modules\v1\controllers
 */
class UserController extends ApiController
{

    /**
     * 指定ORM模型
     * @var string
     */
    public $modelClass = '';

    /**
     * 登录
     * @return array
     */
    public function actionLogin()
    {
        return $this->success();
    }
}

Module.php:

<?php

namespace weChatApi\modules\v1;

/**
 * weChatApi v1 模块
 *
 * Class Module
 * @package weChatApi\modules\v1
 */
class Module extends \yii\base\Module
{

    /**
     * 指定命名控制器
     * @var string
     */
    public $controllerNamespace = 'weChatApi\modules\v1\controllers';

    /**
     * 初始化
     */
    public function init()
    {
        parent::init();
    }
}

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 = yii\helpers\ArrayHelper::merge(
    require __DIR__ . '/../../common/config/main.php' ,
    require __DIR__ . '/../../common/config/main-local.php' ,
    require __DIR__ . '/../config/main.php'
);
( new yii\web\Application( $config ) )->run();

Authentication.php

<?php

namespace weChatApi;

use common\activeRecords\Admin;
use yii\web\IdentityInterface;

/**
 * 实现user组件
 * Class Authentication
 * @package adminApi\modules\v1
 */
class Authentication extends Admin implements IdentityInterface
{

    /**
     * @param int|string $id
     *
     * @return Authentication|IdentityInterface|null
     */
    public static function findIdentity( $id )
    {
        return static::findOne( [ 'id' => $id ] );
    }

    /**
     * @param mixed $token
     * @param null  $type
     *
     * @return void|IdentityInterface
     */
    public static function findIdentityByAccessToken( $token , $type = null )
    {
        return self::findOne( [ 'auth_key' => $token ] );
    }

    /**
     * @return int|mixed|string
     */
    public function getId()
    {
        return $this->getPrimaryKey();
    }

    /**
     * @return string
     */
    public function getAuthKey()
    {
        return $this->auth_key;
    }

    /**
     * @param string $authKey
     *
     * @return bool
     */
    public function validateAuthKey( $authKey )
    {
        return $this->getAuthKey() === $authKey;
    }
}

7、访问接口地址:/BlackCard/weChatApi/web/v1/user/login
返回:

{
    "code": 1,
    "message": "操作成功",
    "count": 0,
    "data": []
}

说明配置成功。可以开发业务接口了

数字IC时序约束实战:深入解析clock_uncertainty的设置策略与后端影响 本文深入探讨数字IC设计中clock_uncertainty的设置策略及其对后端实现的影响。通过分析时钟不确定度的组成(包括clock_skew、clock_jitter和margin),并结合实际项目经验,详细介绍了在不同设计阶段(综合、布局布线、签核)的动态调整方法。文章还提供了工程化处理参数来源、跨时钟域特殊处理以及优化时序收敛的实用技巧,帮助工程师提升数字IC设计的可靠性和性能。 阅读详情

相关推荐

Unity技能系统核心:从理论到实践构建可扩展的Buff管理器

本文深入探讨了Unity游戏开发中构建可扩展技能系统的核心——Buff管理器。通过剖析三层架构(数据、逻辑、渲染)与独立组件管理模式,提供了从Buff数据定义、管理器核心实现到可视化编辑器搭建的完整实践方案,旨在解决技能系统维护难题,提升开发效率与代码质量。

weixin_29002209的博客 255

Yii2高级版框架api接口

一、添加api接口应用 1、复制粘贴一份backend/frontend应用,改名为api(可以自定义) 2、修改api文件的命名空间 3、修改config/main.php配置文件中的id => ‘app-api’ 4、在common/config/bootstrap.php文件中添加api的别名Yii::setAlias('@api', dirname(dirname(__DIR__)) . '/api'); 二、版本控制 1、yii2的版本其实就是不同的模块,操作起来相对于的比较简单,使用Yii

仰望星空下的自己 2068

代码实现ROS2bag录制数据和回放数据(C++)

ROS2的ROS2bag功能可以将指定Topic中的数据以.db3的格式(不同于ROS)保存到本地文件中。读取文件数据可以实现数据回放。

m0_57124501的博客 3257

yii2 RESTful API(一)

今天我们简单搭建一个RESTful API服务,yii2 是个好东西,做接口更方便一些。 废话少说,现在开始了。 一 、首先我们要进行一下文件配置

梦情与你的博客 1866

从3dB定向耦合器到双圆极化天线:在HFSS里玩转相位差90°的馈电艺术

本文详细介绍了在HFSS中设计3dB定向耦合器与双圆极化天线的关键技术,重点解析了90°相位差生成原理及馈电网络设计。通过HFSS仿真工具,实现从定向耦合器到完整天线系统的集成,优化阵列天线性能,适用于卫星通信和雷达系统。

weixin_33717117的博客 556

第八章 MobileNetv3网络详解

本文介绍了基于互补的搜索技术和新颖的架构设计的MobileNets的下一代。MobileNetV3通过硬件感知网络架构搜索(NAS)和NetAdapt算法相结合,针对移动电话CPU进行优化,随后通过新颖的架构改进技术进行了进一步提高。本文开始探索自动化搜索算法和网络设计如何相互协作,以利用互补的方法改进整体技术水平。通过此过程,我们创建了两个新的MobileNet模型:MobileNetV3-Large和MobileNetV3-Small,分别针对高资源和低资源使用情况。

ADICDFHL的博客 1万+

Yii2启动Restful风格Api接口,用于前后端分离项目或者对外的第三方Api接口

使用高级Yii2模板:yii2-app-advanced 原因:建立Restful的Api相当于一个独立的项目,如backend(后端)、frontend(前端),又因为Api与后端项目相识度高,只是封装方法对外暴露,因此需要复制一份backend,重命名为api项目,放在根目录,与backend、frontend、common等同级。 一、准备工作  1、下载安装集成工具,如 wampServ...

qq_38828542的博客 594

LabVIEW+数据库应用系列保姆级教程,第一篇数据库连接

目录LabVIEW连接数据库的方法连接MySQL连接Oracle,SQL Server,Access等 LabVIEW连接数据库的方法 1、创建udl(Universal Data Link)是通用数据连接文件。界面操作,简单快捷。 2、编写连接字符串。需要熟悉连接字符串的结构,容易出错。 3、其他… 本教程教你使用第1种方法,也是最简单、最常用的方法。 连接MySQL 1、在MySQL Installer内安装MySQL Connector/ODBC,建议安装32位(X86),如下图: 2、创建ODBC

wwplh5520370的博客 1万+

Yii2使用modules模块开发Api接口的注意点

如题:Yii2中使用modules开发Api接口 一、新建modules目录 ``` - components - config - controllers - mail - models - modules // 新增 - runtion - tests - traits - vargrant ``` 二、在modules中新建模块目录 ``` - modules -...

qq_38828542的博客 307

Kali Linux下John the Ripper实战:从识别yescrypt哈希到破解zip压缩包(保姆级避坑指南)

本文详细介绍了在Kali Linux中使用John the Ripper工具从识别yescrypt哈希到破解zip压缩包的全过程。针对常见的'No password hashes loaded'报错,提供了两种解决方案,并扩展讲解了哈希识别、zip文件破解及性能优化技巧,是安全测试人员的实用指南。

weixin_29323365的博客 236

Matlab信号处理

Matlab信号处理 需要安装的APP: Signal Analyzer app:提供一个可以在时域和频域可视化、测量、分析和比较信号的工具; Filter Builder和Filter Designer app:可以很方便通过下拉菜单和填写参数的方式来设计和分析数字滤波器; 对于小波分析,Matlab提供了: 1.Wavelet Signal Denoise app:利用离散小波变换对信号去噪; 2.Signal Multiresolution Analyzer app:对信号进行多分辨率的分析和可视化

Huichin_Min的博客 4399

YII2.0多模块配置

使用YII2.0的时候我们有时候可能需要这种需求,比如前台有自己的模块,后台有自己的模块,在细分的话用户也 有自己的模块,订单也有自己的模块。所以我们需要把功能模块化,这里就需要配置多模块了。yii2.0给我们提供gii可以很方便帮我们生成模块出来,接下来就来撸一把。先查看我们的gii是否有配置,打开yii2.0的配置文件查看gii配置如下:$config['modules']['gii'] = [

yuzengyuan的专栏 2790

openlayers6/7 行政区划裁剪 只显示某个区域 示例为天地图

openlayers6/7 行政区划裁剪 只显示某个区域 示例为天地图。

qq_36287830的博客 3105

Yii2 API接口的使用 或 Yii模块(Modules)的使用及配置

参考yii2官网文献https://www.yiichina.com/doc/guide/2.0/structure-modules 模块 模块是独立的软件单元,由模型,视图,控制器和其他支持组件组成, 终端用户可以访问在应用主体中已安装的模块的控制器, 模块被当成小应用主体来看待,和应用主体不同的是, 模块不能单独部署,必须属于某个应用主体。 创建模块 模块被组织成一个称为base path的目录, 在该目录中有子目录如controllers,models,views分别为对应控...

yunxixiao的博客 416

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Php yii verbs,php – Yii2 REST API作为模块路由配置

我有一个现有的Yii2应用程序,并且一直在尝试将REST API作为一个额外的模块实现(也许一个模块不是正确的方法吗?)但是我在配置路由结构时遇到了一些麻烦.根据following guide,它没有完全奏效,也没有遵循预期的结果.我已经构建了一个如下所示的附加模块:moduleapicontrollersUserController.phpModule.phpUserController.php...

weixin_36335279的博客 157

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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/y...

weixin_30293079的博客 117

yii2部署api接口模块

yii2部署api接口模块

sinat_36395423的博客 607

记一个 Yii2 中模块嵌套的配置方法,支持URL美化

Yii2 模块嵌套这一类的文章网上有很多了,也看了不少,只是觉得实用合适的才是最好的,我自己是这么配置的,记一下以防忘记。 在做一个前后端分离项目的后台时,后台的API需要加入版本识别,参考了很多文章,还是觉得用Yii的子模块划分版本最实际,也好维护一点。 假设v1版本有这样几个模块(随便写的,不要太在意细节): v1 admin menu test 他们的关系是嵌套的,那访问最后一个test模块的Index控制器里的Test方法,理论上路径是这样的: /v1/admin/menu/

金海博客 581

php yii demo,七步完成yii2 resful的api搭建

1.其实很简单,复制一个frontend或者backend,将其重命名为api放在同级目录下2.打开common/config/bootstrap.php,为我们的api添加别名Yii::setAlias('@api',dirname(dirname(__DIR__)).'/api');3.给api目录配置一个访问地址:api.demo.com指向 api/web,不会的同学点这里4.然后删...

weixin_31154627的博客 238

yii2 html转换,能够将yii2的api以html文件导出,以及相关的测试

安装composer require itjackjw/yii2-apidoc dev-master添加配置文件'首页模块','author'=>"小明",'apimodule'=>"api","output"=>"index.html"],['title'=>'admin模块','author'=>"小明",'apimodule'=>"module\admin...

weixin_35697229的博客 184

yii2 RESTful API 版本控制

今天我们聊下yii2 api 的版本控制问题。api接口按理论上来说,经常会更新的,还有会接所有语言。所以设置版本还是很重要的。废话少说。 一、目录结构 创建modules v1 v2 controllers 文件夹 和 Module.php 文件 二 、编辑Module.php 文件这个是配置初始化的文件,必须要有。 <?php namespace app\modules\v1; c...

梦情与你的博客 906

快速创建yii2 RESTful api的小记

1.复制backend的应用到同级目录,改名叫api 2.然后就是配置项修改,common和api目录下的 common下: bootstrap.php最后添加一行配置 api/config/main.php中修改,如下两处 如果是apache的话增加.htaccess文件,如下 gii生成对应的module、controller、m...

107

yii2 RESTful 接口 api -1 : 接口的基本配置

原文:http://www.fancyecommerce.com/2016/05/04/yii2-restful-接口-api-1-:-接口的基本配置/ 关于yii2的接口,使用起来是比较方便,配置起来也比较方便,不过按照模块和非模块的配置,在一些地方是不一样的,对于restful api的哲学思想,可以搜索资料,总体来说restfulapi是通过请求类型的不同来决定具体的操作,简略来说,r

houzhyan-博客 637

Yii2.0 快速搭建Restful Api教程

Yii2.0 快速搭建Restful Api教程首先是安装yii2配置nginx,开启伪静态配置config/web.php单独创建API应用在api中创建目录结构新建api接口共用日志api接口安全过滤类validator 首先是安装yii2 使用composer或者源码安装 这是安装Yii2.0的首选方法。如果你还没有安装 Composer,你可以按照这里的说明进行安装。 安装完 Compos...

徊忆羽菲 1386

php restful yii,yii2 restful 风格搭建(一)

最近在研究 yii2 如何搭建 restful api,将心得写下,欢迎一起讨论使用yii2.0.13 advanced 版,将 frontend 整个作为 api 接口项目,除了接口的路由规则可以认证通过外,其他的路由规则都返回请求错误的格式1、数据库结构CREATE TABLE `goods` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`na...

weixin_26873711的博客 240
上一篇: nginx配置文件示例
DamnCode
博客等级 码龄10年 0粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值