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