lazyskills/think-annotation 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

lazyskills/think-annotation

Composer 安装命令:

composer require lazyskills/think-annotation

包简介

Annotation Plus For ThinkPHP6

README 文档

README

安装

composer require lazyskills/think-annotation

配置

配置文件位于 config/annotation.php

使用方法

<?php

namespace app\controller;

use think\annotation\Inject;
use think\annotation\Route;
use think\annotation\route\Group;
use think\annotation\route\Middleware;
use think\annotation\route\Resource;
use think\Cache;
use think\middleware\SessionInit;

/**
 * Class IndexController
 * @package app\controller
 * @Group("bb")
 * @Resource("aa")
 * @Middleware({SessionInit::class})
 */
class IndexController
{

    /**
     * @Inject()
     * @var Cache
     */
    protected $cache;

    public function index()
    {
        //...
    }

    /**
     * @Route("xx")
     */
    public function xx()
    {
        //...
    }

}

自定义注解

创建注解

通过命令行模式创建,例如创建一个User的注解,分为以下三部分

  • 添加注解命令行

    修改tp6命令行文件位置:config/console.php

    添加以下内容:

    <?php
    // +----------------------------------------------------------------------
    // | 控制台配置
    // +----------------------------------------------------------------------
    return [
        // 指令定义
        'commands' => [
            \think\annotation\command\Annotation::class,
            \think\annotation\command\Handler::class
        ],
    ];
  • 生成注解类(annotation)

    命令行操作:例如生成一个 User 类注解

    php think make:annotation User

    生成完成的注解类,如下:

    <?php
    declare (strict_types = 1);
    
    namespace app\annotation;
    
    use Doctrine\Common\Annotations\Annotation;
    
    /**
     * class User
     * @package app\annotation
     * @Annotation
     * @Target({"METHOD","CLASS"}) # 不需要进行类注解去掉"CLASS",不需要方法注解去掉"METHOD"
     */
    class User extends Annotation
    {
        // TODO 完成你对注解字段的定义
    }

    只需要完成 TODO 位置对注解参数的定义,可以参考TP6自带的注解类

  • 生成注解处理器类(handler)

    命令行操作:例如生成一个 User 类注解处理器类

    php think make:handler User

    生成完成的注解类,如下:

    <?php
    declare (strict_types = 1);
    
    namespace app\annotation\handler;
    
    use Doctrine\Common\Annotations\Annotation;
    use think\annotation\handler\Handler;
    
    class User extends Handler
    {
        public function cls(\ReflectionClass $refClass, Annotation $annotation, \think\Route &$route)
        {
            // TODO: 完成类注解的操作
        }
    
        public function func(\ReflectionMethod $refMethod, Annotation $annotation, \think\route\RuleItem &$rule)
        {
            // TODO: 完成方法注解的操作
        }
    }

    只需要完成 TODO 注解的解释进行操作处理哦, cls()方法是针对注解类@Target()中包含CLASS时才会被调用 ,func()方法是针对注解类@Target()中包含METHOD时才会被调用。

    参数说明:

    参数名 简介
    $refClass \ReflectionClass 当前注解类的反射对象
    $annotation 当前类注解的参数对象(cls和func的annotation一样
    $route 当前类的TP6 \think\Route路由对象
    $refMethod \ReflectionMethod 当前注解类访问方法的反射对象
    $rule 当前方法的TP6 \think\route\RuleItem 路由规则对象

    上述只是对参数做的阐述,实际参数意义和作用具体看自身业务。

  • 添加到用户自定义的注解配置中

    文件位置: config/annotation.php

    添加内容:

    return [
        'inject' => [
            'enable'     => true,
            'namespaces' => [],
        ],
        'route'  => [
            'enable'      => true,
            'controllers' => [],
        ],
        'ignore' => [],
        'management' => true,
        'custom' => [
            # 格式:注解类 => 注解操作类
            \app\annotation\User::class => \app\annotation\handler\User::class, # 这里写上你的注解
        ]
    ];

IDE Support

Some IDEs already provide support for annotations:

lazyskills/think-annotation 适用场景与选型建议

lazyskills/think-annotation 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1.04k 次下载、GitHub Stars 达 9, 最近一次更新时间为 2019 年 11 月 11 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 lazyskills/think-annotation 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 lazyskills/think-annotation 我们能提供哪些服务?
定制开发 / 二次开发

基于 lazyskills/think-annotation 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 1.04k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 9
  • 点击次数: 12
  • 依赖项目数: 3
  • 推荐数: 0

GitHub 信息

  • Stars: 9
  • Watchers: 0
  • Forks: 25
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2019-11-11