PHP不重复代码(不要自己重复)

时间:2016-05-15 17:49:21

标签: php codeigniter

我在codeigniter中使用codeigniter(模板)库。我总是在每个函数中重复模板库代码。你会帮我减少代码吗?

public function index(){
    //Load View in template file
        $this->template->title('Contacts')
        ->set_layout($this->admin_home_layout)
        ->set_partial('header', 'admin/admin_share/admin_header')
        ->set_partial('sidebar', 'admin/admin_share/admin_sidebar')
        ->set_partial('footer', 'admin/admin_share/admin_footer')
        ->set_partial('hidenbar', 'admin/admin_share/admin_hidenbar')        
        ->build('admin/admin_home');
    }

我在每个功能中使用这4行。我如何在一个控制器中使用一次以及如何进入功能。

->set_partial('header', 'admin/admin_share/admin_header')
    ->set_partial('sidebar', 'admin/admin_share/admin_sidebar')
    ->set_partial('footer', 'admin/admin_share/admin_footer')
    ->set_partial('hidenbar', 'admin/admin_share/admin_hidenbar')

3 个答案:

答案 0 :(得分:0)

你可以在构造函数中设置它们:

public function __construct() {

    parent::__construct();

    //Do your stuf here

}

或者你可以为它创建一个函数:

function set_partials() {
    $this->template->set_partial('header', 'admin/admin_share/admin_header')
    ->set_partial('sidebar', 'admin/admin_share/admin_sidebar')
    ->set_partial('footer', 'admin/admin_share/admin_footer')
    ->set_partial('hidenbar', 'admin/admin_share/admin_hidenbar')
}

在第二种情况下,您的索引将如下所示:

public function index(){
    //Load View in template file
    $this->template->title('Contacts')
    ->set_layout($this->admin_home_layout);

    $this->set_partials();

    $this->template->build('admin/admin_home');
}

答案 1 :(得分:0)

我建议使用不同的逻辑,只为这样的部分提供自定义数组:

protected $partials = [
    'header' => 'admin/admin_share/admin_header',
    'sidebar' => 'admin/admin_share/admin_sidebar',
    'footer' => 'admin/admin_share/admin_footer',
    'hidenbar' => 'admin/admin_share/admin_hidenbar'
];

并使用此函数构建布局

public function build_layout()
{
    $this->template->title('Contacts')->set_layout($this->admin_home_layout);
        foreach($this->partials as $k => $partial){
            $this->template->set_partial($k,$partial);
    }
    $this->template->build('admin/admin_home');

}

答案 2 :(得分:0)

这就是我这样做的方法(适用于PHP中任何具有类似渲染视图方式的框架):

假设控制器看起来像这样:

<?php 
class AdminController extends BaseController{
    public function viewData($id){
        // do something
        $this->render('something static 1');
        $this->render('customview');
        $this->render('something static 2');
        $this->render('something static 3');
    }

}
?>

我要做的是创建一个基本控制器来执行此渲染任务(以及更多重复的东西):

<?php 

class MyBaseController extends BaseController{

    protected function renderAll($param){
        if(empty($param)){
            return false;
        }
        $this->render('something static 1');
        $this->render($param);
        $this->render('something static 2');
        $this->render('something static 3');
        return true;
    }
}

?>

完成此操作后,我将在所有控制器中继承新创建的控制器,例如:

<?php 
class AdminController extends MyBaseController{
    public function viewData($id){
        // do something
        $this->renderAll('customview');
    }

}
?>

您可以在任何想要的控制器操作中重复使用它,只需继承自定义基本控制器类。