模型链式用法狠好,为啥不支持链式配置数组自动调用?

浏览:313 发布日期:2017/09/10 分类:ThinkPHP5专区 关键字: 链式 链式配置
在TP3时代,为了代码复用最高,我一般都会底层统一的logic逻辑,
通过上层控制器定制链式配置数组,实现所有端的数据获取

这里贴出TP5的实现,希望官方能考虑支持这种配置式做法。

1. model层注入这个traits<?php
namespace app\common\traits\model;

trait ModelExtension
{
    /**
     * 根据链式配置数组, 遍历执行链式语句
     *
     * @param [type] $chains
     * @return void
     */
    public function setModelByChains($obj=NULL, $chains=[]) {
        if(!$obj) {
            $obj = $this;
        }
        if(empty($chains)) {
            return $obj;
        }
        foreach($chains as $_name => $_chain) {
            $chainName = strtolower($_name);
            $chainArgs = [];
            if(is_array($_chain)) {
                $chainArgs = $_chain;
            }else{
                $chainArgs[] = $_chain;
            }
            call_user_func_array([$obj, $chainName], $chainArgs);
        }
        return $obj;
    }
    
}
2. logic层使用演示    public function getAllCategorys($chains=[]) {
        // default chains
        $_chains = [
            'where' => [
                'status', '=', 1
            ]
        ];
        $_chains = !empty($chains) ? array_merge_recursive($_chains, $chains) : $_chains;
        $dataSet = $this->queryDatasByChains($_chains);
        return $dataSet;
    }
3. Controller一般分为好几个端,每个端如果需要特殊定制获取数据,那么自行传入定制的chains,array_merge_recursive会覆盖默认设定的chains
最佳答案
评论( 相关
后面还有条评论,点击查看>>