2013-08-20 32 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個函數中,然後調用它們,就像討厭,但會爲您節省一些空間。