2013-04-28 22 views
2

我想知道從模型傳遞成功或失敗消息到控制器的最佳消息是什麼?成功消息很簡單,因爲我們可以將數據傳回。但是,對於失敗,我們只能傳遞FALSE而不是失敗的回調結果。Model在MVC中無法在DB中找到記錄時,何處傳回消息?

什麼是最好的方法?

這裏是方法之一:

下面是該模型:

function get_pkg_length_by_id($data) { 
    $this->db->where('id', $data['pkg_length_id']); 
    $result = $this->db->get('pkg_lengths'); 
    if($result->num_rows() > 0) { 
     return $result->row(); 
    } 
    else { 
     return false; 
    } 
} 

在控制器中,我會做

function show() { 
    if(get_pkg_length_by_id($data) { 
     //pass success message to view 
    } 
    else { 
     //Pass failure message to view 
    } 

在這裏是2版本:

在模型

function get_pkg_length_by_id($data) { 
    $this->db->where('id', $data['pkg_length_id']); 
    $result = $this->db->get('pkg_lengths'); 
    if($result->num_rows() > 0) { 
     $result['status'] = array(
      'status' => '1', 
      'status_msg' => 'Record found' 
     ); 
     return $result->row(); 
    } 
    else { 
     $result['status'] = array(
      'status' => '0', 
      'status_msg' => 'cannot find any record.' 
     ); 
     return $result->row(); 
    } 
} 

在控制器

function show() { 
$result = get_pkg_length_by_id($data); 
    if($result['status['status']] == 1) { 
     //pass $result['status'['status_msg']] to view 
    } 
    else { 
     //pass $result['status'['status_msg']] to view 
    } 

回答

2

我不能肯定地說這是最好的。我可以說我經常使用選擇#2,在那裏我從服務器傳遞錯誤,通常以特定的形式這樣做,以使控制器的任何子類都可以解析併發送到視圖。

而且,在你的節目()函數,該else是多餘的,一旦你回來,你會打出來的功能,所以你可以這樣做:

if($result->num_rows() > 0) { 
    $result['status'] = array(
     'status' => '1', 
     'status_msg' => 'Record found' 
    ); 
    //the condition is met, this will break out of the function 
    return $result->row(); 
} 
$result['status'] = array(
    'status' => '0', 
    'status_msg' => 'cannot find any record.' 
); 
return $result->row(); 
+0

我覺得這個節目的功能應該只是一次返​​回。使用多個返回=>意大利麪代碼...最好在if/else中設置一個變量並返回它。個人喜好我想... – joe42 2013-04-28 04:08:02

+0

@ joe42是的,這是個人喜好的問題。儘管我發現有其他一些東西可以使意大利麪條更像代碼:-) – TheMethod 2013-04-28 18:20:27

2

它總是一個很好的做法做這些東西在模型頁面中。

我對你做了什麼如下做出一些改動:

function get_pkg_length_by_id($data) 
{ 
    $this->db->where('id', $data['pkg_length_id']); 
    $query = $this->db->get('pkg_lengths'); 
    /* 
     Just changed var name from $result to $query 
     since we have a $result var name as return var 
    */ 
    if($result->num_rows() > 0) { 
     $result = $query->row_array(); 
     /* 
      $result holds the result array. 
     */ 
     $result['status'] = array(
      'status' => '1', 
      'status_msg' => 'Record found' 
     ); 
     //return $result->row(); 
     /* 
      This will return $result->row() only which 
      doesn't include your $result['status'] 
     */ 
    } 
    else { 
     $result['status'] = array(
      'status' => '0', 
      'status_msg' => 'cannot find any record.' 
     ); 
     //return $result->row(); 
     /* 
     This is not required. 
     Returning just status message is enough. 
     */ 
    } 
    return $result; 
} 
相關問題