2013-08-20 74 views
2

我们使用CodeIgniter来包装一些内部函数并将结果显示在json中。删除CodeIgniter函数中的重复代码

偶尔我们的内部函数可能会将调试字符串打印到屏幕上。因此,我们已经开始使用输出缓冲来捕获任何调试并将其添加到结果中$data['response']['debug'] = $ob;

这似乎工作得很好,因为我们已经开始将此代码放入大多数公开公开的CI函数中。

现在我们似乎在重复这个代码流。

将“重复”部分提取到通用模板中并在需要时调用的最佳方法是什么? (不是每个功能都实现这一点 - 只是大部分)。

示例代码:

public function some_function($var){ 
    ob_start(); //repeated 

    $this->load->model('some_model'); 
    $result = $this->some_model->do_something($var); 

    if($result){ 
     $data['response']['result'] = true; 
    }else{ 
     $data['response']['error'] = 'Something not found.'; 
    } 

    $ob = ob_get_clean(); //repeated 

    if($ob!=''){ 
     $data['response']['debug'] = $ob; //repeated 
    } 

    $this->load->view('json',$data); //repeated 
} 
+0

不确定我遵循什么“我们正在使用CodeIgniter来包装一些内部功能”的意思,但你可能想看看控制器挂钩http://ellislab.com/codeigniter/user-guide/general/hooks.html – jmadsen

+0

“内部函数”是指我们的遗留代码(通常隐藏在公共视图中)。我们通过json公开了其中的一些。也许你可以扩大你的答案一点点? –

回答

0

如果你有PHP 5.3.0或更高版本,你可以做这样的事情:

function debug_func($code){ 

ob_start(); //repeated 

$code(); 

$ob = ob_get_clean(); //repeated 

if($ob!=''){ 
    $data['response']['debug'] = $ob; //repeated 
} 

$this->load->view('json',$data); //repeated 

} 

,并使用你的代码是这样的:

debug_func(function(){ 
$this->load->model('some_model'); 
$result = $this->some_model->do_something($var); 

if($result){ 
    $data['response']['result'] = true; 
}else{ 
    $data['response']['error'] = 'Something not found.'; 
} 

}); 

并做所有你的代码。

Ofcourse您还可以将重复的代码包装在2个函数中,然后调用它们,就像讨厌,但会为您节省一些空间。