如何巧用模块下的traits进行重写后台功能简单版
756
8

我们都知道官方内置了十分灵活强大的C/F/M/S.php 等核心方法。

如果我们继承了这些那么就要受限制于这些规则。

那么我们能不能既能继承又可以重置这些方法呢 答案是可以的。

这里仅仅提供一个思路 具体功能还是需要自己灵活掌握的。

以cms后台举例:

application\cms\admin\Content.php

<?php
namespace app\cms\admin;

use app\common\controller\admin\C;
use app\cms\traits\Content AS TraitsContent;


class Content extends C
{	
    use TraitsContent;
}

你会发现这里调用了 app\cms\traits\Content 

<?php
namespace app\cms\traits;

trait Content
{
}

我们注意到他使用了php的特性trait 关于trait这里不解释了 自己百度去

简单的说就是说这里的优先级会高于c.php

其他的文件都可以以这种方式实现最小化的改造。

灵活运用事半功倍

那么我们就可以在这里重写c.php的方法了

例如我们就可以把C。php 中的add方法直接复制过来进行适合自己的更改。


<?php
namespace app\cms\traits;

trait Content{
  /**
     * 发布页,可以根据栏目ID或者模型ID,但不能为空,不然不知道调用什么字段
     * @param number $fid
     * @param number $mid
     * @return unknown
     */
    public function add($fid=0,$mid=0){
        $data = $this->request->post();
        isset($data['fid']) && $fid = $data['fid'];
        
        if($fid && !$mid){
            $mid = $this->model->getMidByFid($fid);
        }elseif( !$fid && !$mid ){  //栏目与模型都为空
            return $this->postnew();
        }elseif( config('post_need_sort') && !$fid ){  //指定必须要选择栏目的频道
            return $this->postnew($mid);
        }
        $this->mid = $mid;
        
        //接口
        hook_listen('cms_add_begin',$data);
        if (($result=$this->add_check($mid,$fid,$data))!==true) {
            $this->error($result);
        }
        
        // 保存数据
        if ($this -> request -> isPost()) {
//             $data = $this->request->post();
            
//             if(isset($data['map'])){
//                 list($data['map_x'],$data['map_y']) = explode(',', $data['map']);
//             }
            
            $this->saveAdd($mid,$fid,$data);
        }
        
        //发表时可选择的栏目
        $sort_array = $this->s_model->getTreeTitle(0,$mid);
        //发布页要填写的字段
        $this->form_items = $this->getEasyFormItems();     //发布表单里的自定义字段
        //如果栏目存在才显示栏目选择项
        if( config('post_need_sort') ){
            $this->form_items = array_merge(
                        [
                                [ 'select','fid','所属栏目','',$sort_array,$fid],
                               // [ 'linkages','street_id','所属地区','','area',4],
                        ],
                        $this->get_my_qun(),
                        $this->form_items
                        //$this->getEasyFormItems()
                    );
        }
        
        //联动字段
        $this->tab_ext['trigger'] = $this->getEasyFieldTrigger();
        
        $this->tab_ext['area'] = config('use_area'); //是否启用地区
        
        //分组显示
        $this->tab_ext['group'] = $this->get_group_form($this->form_items);
        if( $this->tab_ext['group'] ){
            unset($this->form_items);
        }

        $this->tab_ext['page_title'] = '发布 '.$this->m_model->getNameById($this->mid);

        return $this->addContent('index',['fid'=>$fid]);
    }
}


9
赏礼
赏钱
收藏
点击回复
      全部留言
  • 8
  • 石头 风格开发者 消费:21923.34元 2019-06-13 10:08 10:086楼

    学习了

0 赏钱 赏礼回复
  • 银杏114在线 实战运营者 消费:3609.79元 2019-06-03 17:15 17:156楼

    很多专业术语咱也不懂 也不敢问 

0 赏钱 赏礼回复
  • 阿赖耶识 程序开发者 消费:24.43元 2019-06-03 16:46 16:466楼

    顶下

0 赏钱 赏礼回复
  • snscn 普通粉丝 消费:1862.35元 2019-06-03 15:40 15:40
    其他手机
    6楼
    suifeng大课堂开讲了,学习中。。。
    Suifeng 消费:23.24元 2019-06-03 15:41
    热的不想码字就瞎鼓捣吧
    snscn 消费:1862.35元 其他手机 2019-06-03 15:42
    @Suifeng 大神客气,很实用,你好多帖子我都看了,学了不少东西,谢谢。
    Suifeng 消费:23.24元 2019-06-03 15:45
    @snscn 很多专业术语咱也不懂 也不敢问 就按照自己理解的瞎写吧
0 赏钱 赏礼回复
更多回复
恢复多功能编辑器
  • 3 1
  • Suifeng开发交流圈
        圈内贴子4108
    • 圈子成员433
    本圈子内的新贴

    推荐内容
    扫一扫访问手机版
    请选择要切换的马甲:

     
    网页即时交流
    QQ咨询
    咨询热线
    020-28998648