TP5 获取器更好的用法

TP5获取器的作用是对模型实例的(原始)数据做出自动处理。规范官方文档已经很明了了,贴上地址TP5获取器
假如数据库中定义的 status 有很多种状态,并且对应的msg并不是$status = [-1=>'删除',0=>'禁用',1=>'正常',2=>'待审核']; 这种简单格式,那该如何处理。

使用枚举能更好的处理获取器。

定义一个枚举类(它并不是一个非常标准的枚举类,这里简称)

<?php
/**
 * Created by PhpStorm.
 * User: 一场丶
 * Date: 2018/12/18
 * Time: 22:30
 */

namespace app\index\enum;

class TestStatus
{
    private $First = 1;
    private $Second = 2;
    private $Three = 3;
    private $Four = 4;
    private $num = null;

    public function __construct($num)
    {
        foreach ($this as $key => $value){
            if ($num === $value){
                $this->num = $value;
            }
        }
    }

    public function getStr(){
        $keyMap = [
            $this->First => [
                'str' => '我是1'
            ],
            $this->Second => [
                'str'=>'我是2'
            ],
            $this->Three => [
                'str' => '我是3'
            ],
            $this->Four => [
                'str' => '我是4'
            ],
        ];
        return is_null($this->num) ?
            false :
            $keyMap[$this->num]['str'];
    }
}

在模型中使用(直接对字段值进行修改)

<?php
/**
 * Created by PhpStorm.
 * User: 一场丶
 * Date: 2018/12/18
 * Time: 22:50
 */

namespace app\common\model;


use think\Model;
use app\index\enum\TestStatus;

class Test extends Model
{

    public function getStatusAttr($value){
        $str = (new TestStatus($value))->getStr();
        return $str;
    }

}

控制器中获取:

<?php
/**
 * Created by PhpStorm.
 * User: 一场丶
 * Date: 2018/12/18
 * Time: 22:30
 */

namespace app\index\controller;

use app\common\model\Test as TestModel;
use think\Controller;


class Index extends Controller
{
    public function index(){
        $res =  TestModel::get(1);
        print_r($res->status);
    }
}

输出:

我是1
如果我们想保留status字段,可以定义数据表中不存在的字段

模型中定义方法getStatusTextAttr

<?php
/**
 * Created by PhpStorm.
 * User: 一场丶
 * Date: 2018/12/18
 * Time: 22:50
 */

namespace app\common\model;
use think\Model;
use app\index\enum\TestStatus;

class Test extends Model
{
    
    public function getStatusTextAttr($value,$data){
        $str = (new TestStatus($data['status']))->getStr();
        return $str;
    }
}

控制器使用:

<?php
/**
 * Created by PhpStorm.
 * User: 一场丶
 * Date: 2018/12/18
 * Time: 22:30
 */

namespace app\index\controller;

use app\common\model\Test as TestModel;
use think\Controller;

class Index extends Controller
{
    public function index(){
        $res =  TestModel::get(1);
        print_r($res->status_text);
    }
}

同样得出结果:

我是1
以上就是TP5和枚举类型来使用获取器。这样就能更好的去处理获取器,代码可读性也会更高 。在模型中,只是需要调用枚举类已经处理好的方法,其中要输出字符串还是html格式文本,都不需要在模型中去定义。最后,获取器而不仅仅是在模型中定义一个方法,有一个类支撑,一个类比方法的扩展性和可读性都是更好的。

注:上面的枚举类只是一个个人示例,不喜勿愤。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值