在ThinkPHP5.1 框架中自己封装了一个 trait 类,每次都在控制器中使用,但是在使用框架自身的验证器类(框架控制器方法)报错

在控制器中使用自定义验证器

$param = $this->request->post();
$result = $this->validate($param, LiveValidate::class);
if (true !== $result) {
return response_json(1, $result);
}

日志错误信息:

[ error ] [0]致命错误: Call to a member function validate() on null[/var/www/www.tinywan.com/thinkphp/library/think/Controller.php:251]

以上错误就是由于应用了自定义的  trait 类导致的,如果移除该 trait 类则不会报错,加入以后就会报错。、

原因分析:

为何调用不了父类的控制器方法。由于自定义 trait 类 没有继承框架的构架方法。

解决办法:

在trait 类的构架方法中,继承父类的构架方法,解决问题

测试案例

基类控制器(模拟TP自带控制器)

class MyBaseController
{
/**
* MyBaseController constructor.
*/
public function __construct()
{
echo " MyBaseController基类构架方法<br/>";
} /**
* @desc: 基类-验证器
*/
public function validate()
{
echo "基类-验证器 <br/>";
}
}

自定义trait 类

trait MyTrait
{
protected $var = "MyTrait_var"; /**
* MyTrait constructor.
*/
function __construct()
{
parent::__construct();
echo "MyTrait 构架方法 <br/>";
} /**
* @desc: 添加
*/
function create()
{
echo "MyTrait create方法 <br/>";
}
}

控制器子类,继承控制器父类 MyBaseController 

class MyBaseController
{
/**
* MyBaseController constructor.
*/
public function __construct()
{
echo " MyBaseController基类构架方法<br/>";
} /**
* @desc: 基类-验证器
*/
public function validate()
{
echo "基类-验证器 <br/>";
}
}

调用控制器子类

public function traitsDemo()
{
$obj = new MyController();
var_dump($obj->validate());
var_dump($obj->create());
var_dump($obj->hello());
}

打印结果

MyBaseController基类构架方法

MyTrait 构架方法

基类-验证器

MyTrait create方法

MyController 子类 hello方法

最新文章

  1. CentOS7下默认目录安装mono+jexus教程
  2. Apache配置简单http认证
  3. Mediator Pattern --中介者模式原理及实现(C++)
  4. IOS,Object C学习过程中遇到的attributes
  5. 在win8.1 64位环境下有关Oracle的安装和卸载
  6. Flash Media Live Encoder 使用帮助
  7. XRecyclerView上拉刷新下拉加载
  8. Power BI 与 Azure Analysis Services 的数据关联:1、建立 Azure Analysis Services服务
  9. fastjson tojson部分规则
  10. Nginx-nginx和反向代理
  11. 以太坊客户端Ethereum Wallet与Geth区别简介
  12. makefile 双冒号规则
  13. 聊聊 CAS
  14. spring4.3.9 @ResponseBody中文乱码,全是问号
  15. VC中GetLastError()获取错误信息的使用,以及错误代码的含义
  16. 原生js实现选项卡
  17. 执行一条sql语句update多条不同值的记录实现思路
  18. java.io.writer API 以及 源码解读
  19. Solo and Mute
  20. uvaoj455Periodic Strings(枚举)

热门文章

  1. 纯css无js实现点击事件
  2. Android-----spinner组件使用(实现下单)
  3. Kubernetes学习之基础概念
  4. Shell 编程 条件语句
  5. springboot2.1.3 配置前后端跨域问题
  6. IIS配置伪静态 集成模式 样式丢失
  7. CC2530调试过程中遇到的问题们
  8. Httpd服务进阶知识-LAMP架构概述
  9. DT下重新定义设置发布发布条数后的跳转页面
  10. dart 中的 try on catch