我们都知道官方内置了十分灵活强大的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]); } }