# thinkphp-annotation **Repository Path**: cshaptx4869/thinkphp-annotation ## Basic Information - **Project Name**: thinkphp-annotation - **Description**: thinkphp5.1 注解插件 - **Primary Language**: PHP - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-01-03 - **Last Updated**: 2025-04-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: ThinkPHP ## README # thinkphp-annotation 前言: ------- thinkphp5.1中用注解的方式实现: - 请求数据验证 - 请求数据过滤、格式化 - 属性对象自动注入 - 自动事务 > 最新文档地址:https://www.cnblogs.com/cshaptx4869/p/12178960.html 安装 ------------ ```bash composer require cshaptx4869/thinkphp-annotation ``` ## 配置 `tags.php `添加行为,用于控制器注解扫描 ```php 'action_begin' => [ \Fairy\ControllerAnnotationScaner::class ] ``` 模型中使用属性注解的话,需要在模型中引入 \Fairy\ModelAnnotationScaner 的trait ```php use \Fairy\ModelAnnotationScaner; ``` 添加 `system.php` 配置文件(可选) ```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 | 方法 | 验证器验证 | ###### v0.1.1版: | 注解名 | 申明范围 | 作用 | | ------------- | -------- | -------------------- | | @RequestParam | 方法 | 过滤、格式化请求参数 | | @Validator | 方法 | 验证器验证 | | @Autowire | 属性 | 自动注入类对象 | | @Transaction | 方法 | 自动事务 | > #### 版本差异: > > v0.1.1新增: > > **Transaction 注解** > > Transaction 注解根据当前方法返回值自动判断事务后续处理,如返回值等价于true就会自动commit,否则rollback。 > > Transaction 注解需要搭配 Autowire注解使用,且不支持在控制器中使用,推荐在模型中使用。 > > **ModelAnnotationScaner** > > 支持模型中使用属性注解 > > > > Autowire 注解改动: > > v0.1.0 版本中 Autowire 注解必须写class属性,如 Autowire(class=ArticleModel::class),而在v0.1.1版本中 Autowire 注解则没有class属性而是通过@var ArticleModel 注解来自动识别。 ## v0.1.0版本使用示例 `ArticleController` 控制器: ```php requestParam; return MyToolkit::success($this->articleModel->store($postData)); } ``` ## v0.1.1版本使用示例 `ArticleController` 控制器: ```php requestParam; return MyToolkit::success($this->articleModel->store($postData)); } } ``` `ArticleModel` 模型: ```php insertGetId($params); $realtion = array_map(function ($categoryId) use ($articleId) { return [ 'article_id' => $articleId, 'category_id' => $categoryId ]; }, $categoryIds); return $this->articleCategoryRelationModel->store($realtion); } } ``` ## IDE 注解插件支持 一些ide已经提供了对注释的支持,推荐安装,以便提供注解语法提示 - Eclipse via the [Symfony2 Plugin](http://symfony.dubture.com/) - PHPStorm via the [PHP Annotations Plugin](http://plugins.jetbrains.com/plugin/7320) or the [Symfony2 Plugin](http://plugins.jetbrains.com/plugin/7219)