码迷,mamicode.com
首页 > Web开发 > 详细

PHP系列 | 代码复用trait的构造函数使用

时间:2019-12-16 11:30:42      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:cti   live   date   public   function   rar   protected   案例   解决   

在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方法

PHP系列 | 代码复用trait的构造函数使用

标签:cti   live   date   public   function   rar   protected   案例   解决   

原文地址:https://www.cnblogs.com/tinywan/p/12048120.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!