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' => [
\Fairy\ControllerAnnotationScaner::class
]
模型中使用注解的话要 在模型中引入 ModelAnnotationScaner 的trait
use \Fairy\ModelAnnotationScaner;
添加 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 app\index\controller; use app\index\validate\Article\SaveValidate;
use app\common\model\ArticleModel;
// 引入对应的注解
use Fairy\Annotation\Autowire;
use Fairy\Annotation\RequestParam;
use Fairy\Annotation\Validator;
use think\Request; 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 app\common\model; use Fairy\Annotation\Autowire;
use Fairy\Annotation\Transaction;
use Fairy\ModelAnnotationScaner;
use think\Db;
use think\Model; 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已经提供了对注释的支持,推荐安装,以便提供注解语法提示
- Eclipse via the Symfony2 Plugin
- PHPStorm via the PHP Annotations Plugin or the Symfony2 Plugin
thinkphp5.1注解插件的更多相关文章
- thinkphp5配合datatable插件分页后端处理程序
thinkphp5配合datatable插件分页后端处理程序第一版DataTable.php v.1.0 <?php use think\Db; /** * DataTable.php. */ ...
- 超好用的thinkphp5.0/thinkphp5.1分页插件!详细使用步骤(内附代码)
效果 tp5.0使用方法 page下载地址:进入下载页面 提取码:s75k 1,把page文件夹整个目录复制到 目录extend下 2,修改默认配置 app/config.php 把里面的 'pagi ...
- .Net 常用插件及第三方库
.Net 常用插件及第三方库 一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址: ...
- thinkphp5.0的验证码安装和相关错误
thinkphp5.0的验证码安装和相关错误 问题 只要是之前使用thinkphp5框架搭建网站的时候发现不管如何调用验证码都无法使用,按照官网要求,使用composer安装验证码出现报错Fatal ...
- IntelliJ Idea 常用10款插件(提高开发效率)
出自:https://blog.csdn.net/weixin_41846320/article/details/82697818 插件安装方式: 1.Background Image Plus 这款 ...
- idea 实用插件
尊重劳动成果,本插件的整理原文出自:https://blog.csdn.net/weixin_41846320/article/details/82697818,感谢老铁的辛苦原创. 插件安装方式: ...
- Idea牛逼插件,拿走不谢
1.grep console java 开发的过程中,日志都会输出到console,输出的内容是非常多的,所以需要有一个工具可以方便的查找日志,或者可以非常明显显示我们关注的内容,grep conso ...
- 安利一波这12个IDEA插件,太香了!
这里补充一下常用的插件, 非常值得安利一波! 1.日晒主题 Solarized Themes 推荐指数:☆☆☆☆☆ 推荐理由:日晒主题本身是为vim定制的.后来移植到ide 非常酷!配色非常耐看. ...
- Angular (SPA) WebPack模块化打包、按需加载解决方案完整实现
文艺小说-?2F,言情小说-?3F,武侠小说-?9F long long ago time-1-1:A 使用工具,long long A ago time-1-2:A 使用分类工具,long long ...
随机推荐
- 1167E - Range Deleting 双指针
题意:给出n个数的序列,并给出x,这n个数的范围为[1,x],f(L,R)表示删除序列中取值为[l,r]的数,问有几对L,R使得操作后的序列为非递减序列 思路:若[l,r]成立,那么[l,r+1],. ...
- php curl请求 header头携带参数
$headers = array( 'api-key:'.$key, 'authorization:'.$authorization, ); //初始化 $curl = c ...
- 传奇装备锻造升级UPGRADEITEMEX功能详解
装备升级功能可以指定升级物品及属性,按指定机率得到结果.需要升级的装备物品必须放在身上.命令格式UPGRADEITEMEX 物品位置(0-12) 属性位置(0-14) 成功机率(0-100) 点数机率 ...
- 《深入浅出WPF》学习总结之Binding
一.前言 友好的图形用户界面(Graphics User Interface ,GUI)的流行也就是近十来年的事情,之前应用程序与用户的交互是通过控制台界面(Console User Interfac ...
- python笔记17
1.今日内容 迭代器(3*) 生成器(4*) 装饰器(5*) 项目结构 logging模块 2.内容回顾 & 作业 2.1 内容回顾 2.1.1 函数(内置/自定义) 基本函数结构 def f ...
- 虚拟机安装的ubuntu不能联网解决
安装双系统从没遇到的问题,再虚拟机上遇到了不能联网的问题: 下面给出我的解决方法(win10系统.ubuntu 16.04) 我的电脑-管理-设备管理器 看是否虚拟机的虚拟网卡在: 在去设置-控制面板 ...
- PostGreSql - 提取jsonb数据
本文主要介绍如何在PostGreSql中提取出jsonb类型字段中的某个key的值 参考:https://www.cnblogs.com/mywebnumber/p/5551092.html 一.简单 ...
- bugku 社工进阶
首先看到的是 由于之前知道有bugku的百度吧 并且这个是一个社工题所以可以试一下这个百度吧 进入百度吧然后会见到 这句话的意思是要我们登录这个账号 但是我们只有账号没有密码 如果爆破的话很有可 ...
- 项目出现红色感叹号, pom.xml并出错
问题描述: eclipse出现红色感叹号,pom.xml 文件也报错 但没有提示具体是那里出错了. 打开 Java Build Path 找到 Librarices 你在看到 Maven Dep ...
- Educational Codeforces Round 78 (Rated for Div. 2)E(构造,DFS)
DFS,把和当前结点相连的点全都括在当前结点左右区间里,它们的左端点依次++,然后对这些结点进行DFS,优先对左端点更大的进行DFS,这样它右端点会先括起来,和它同层的结点(后DFS的那些)的区间会把 ...