zoukankan      html  css  js  c++  java
  • thinkphp5.1注解插件

    前言:

    thinkphp5.1中用注解的方式实现:

    v0.1.0版本

    • 数据验证器
    • 请求过滤、格式化
    • 属性对象注入

    dev-master版本 额外支持

    • 自动事务
    • 数据缓存

    如果您觉得好用,点个star哈
    github地址:https://github.com/cshaptx4869/thinkphp-annotation

    安装

    稳定版:composer require cshaptx4869/thinkphp-annotation
    最新版:composer require cshaptx4869/thinkphp-annotation:dev-master

    配置

    tags.php 添加行为用于控制器注解扫描

    'action_begin' => [
         FairyControllerAnnotationScaner::class
    ]

    模型中使用注解的话要 在模型中引入 ModelAnnotationScaner  的trait

    use FairyModelAnnotationScaner;

    添加 system.php 配置文件(可选)

    return [
        'annotation' => [
            'cache' => false,// 是否开启注解读取缓存,默认false
            'writelist' => []// 注解读取白名单,默认[]
            'interceptor' => [// 注解拦截器相关配置
                'enable' => true,// 默认开启注解拦截器
                'whitelist' => []// 注解拦截器白名单,默认[]
            ],
            'validate' => [
                'callback' => function($msg) {
                    // 自定义验证错误信息后续处理
                }
            ]
        ]
    ]

    PS:默认验证器注解验证不通过会终止程序运行并返回json格式的验证错误信息。可通过配置 callback函数自定义后续处理。请注意,不同版本使用上会有些许差别。

    支持的注解

    v0.1.0
    注解名申明范围作用
    @Autowire 属性 自动注入类对象
    @DynamicAutowire 方法 声明当前方法允许属性注入的类
    @IgnoreAutowire 方法 声明当前方法忽略属性注入的类
    @RequestParam 方法 过滤、格式化请求参数
    @Validator 方法 验证器验证

                                  

    dev-master
    注解名申明范围作用
    @Autowire 属性 自动注入类对象
    @Transaction 方法 开启事务返回值等价于true就会自动commit,否则rollback
    @RequestParam 方法 过滤、格式化请求参数
    @Validator 方法 验证器验证
    @DataCache 方法 方法数据缓存

    版本差异:

    dev-master新增:

    Transaction 注解

    Transaction 注解根据当前方法返回值自动判断事务后续处理,如返回值等价于true就会自动commit,否则rollback。

    Transaction 注解需要搭配 Autowire注解使用,且不支持在控制器中使用,推荐在模型中使用。

    DataCache 注解

    被DataCache注解修饰的方法的返回数据会被缓存。

    ModelAnnotationScaner

    支持模型中使用属性注解

    Autowire 注解改动:

    v0.1.0 版本中 Autowire 注解必须写class属性,如 Autowire(class=ArticleModel::class),而在v0.1.1版本中 Autowire 注解则没有class属性而是通过@var ArticleModel 注解来自动识别。

    使用 dev-master 版本

    ArticleController 控制器:

    <?php
    
    namespace appindexcontroller;
    
    use appindexvalidateArticleSaveValidate;
    use appcommonmodelArticleModel;
    // 引入对应的注解
    use FairyAnnotationAutowire;
    use FairyAnnotationRequestParam;
    use FairyAnnotationValidator;
    use thinkRequest;
    
    class ArticleController
    {
        /**
         * 属性对象注入
         * @Autowire()
    * @var ArticleModel
    */ public $articleModel; /** * 数据验证 * clsss: thinkphp定义的验证器类名(必填) string类型 * scene: 验证场景名 string类型 * batch:是否批量验证 bool类型 * throw: 验证失败是否抛出异常 bool类型 * @Validator( * class=SaveValidate::class, * scene="save", * batch=false, * throw=false * ) * * 获取参数 * fields: 定义要获取的字段名,可批量设置默认值 array类型 * mapping: 转换前台传递的字段名为自定义的字段名 array类型 * method: 获取参数的方法,支持get、post、put、delte string类型 * json: 格式化json字段的数据 array类型 * * json使用示例: * json:{field1,field2,...fieldn} * 表示格式化field1,field2,...,字段的json数据 * * 支持json一维和二维字段的涮选,如 * json:{field1:{childField1,childField2...}} * 表示格式化field1字段的json数据,并只获取field1字段下的childField1和childField2下标的值(支持深度一维和二维,会自动识别) * * @RequestParam( * fields={"title","image_url","content","category_id","is_temporary","extra":"默认值"}, * json={"category_id"}, * mapping={"image_url":"img_url"}, * method="post" * ) */ public function save(Request $request) { //获取过滤过后的参数 $postData = $request->requestParam; return MyToolkit::success($this->articleModel->store($postData)); } }
    AaaModel 模型
    <?php
    
    namespace appcommonmodel;
    
    use FairyAnnotationAutowire;
    use FairyAnnotationTransaction;
    use FairyModelAnnotationScaner;
    use thinkDb;
    use thinkModel;
    
    class AaaModel extends Model
    {
        // 模型中使用Autowire注解的trait
        use ModelAnnotationScaner;
    
        /**
         * @Autowire()
         * @var AccountModel
         */
        public $accountModel;
        
        /**
         * 注解控制事务
         * 返回值等价于true commit 否则 rollback
         * @Transaction()
         */
        public function store()
        {
            return Db::name('aaa')->insert(['id' => 14, 'username' => 'bob']) > 0;
        }
        /**
    * 方法缓存
    * @DataCache(expire="3m")
    */
    public function index()
    {
    return Db::name('aaa')->page(1, 2)->order('id', 'desc')->select();
    }
    }

    IDE 注解插件支持

    一些ide已经提供了对注释的支持,推荐安装,以便提供注解语法提示

  • 相关阅读:
    眼底血管分割测试部分
    眼底血管分割训练函数(SVM,Adaboost)
    将眼底图片生成的txt文件进行格式化处理
    图像特征的提取(gaussian,gabor,frangi,hessian,Morphology...)及将图片保存为txt文件
    读书计划(2020年秋)
    假期周进度报告3
    信息化领域热词分类分析及解释
    个人课程总结
    第二阶段团队冲刺3
    第二阶段团队冲刺2
  • 原文地址:https://www.cnblogs.com/cshaptx4869/p/12178960.html
Copyright © 2011-2022 走看看