2013-04-28 1 views
2

Мне интересно, что является лучшим сообщением, чтобы передать сообщение об успехе или ошибке от модели контроллеру? Сообщение об успехе легко, потому что мы можем передать данные обратно. Однако для сбоев мы можем передавать только FALSE, а не результат обратного вызова ошибки.Где передать сообщение, когда модель не может найти запись в БД в MVC?

Каков наилучший способ?

Вот метод один:

Вот модель:

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

+0

@ joe42 да, это вопрос личных предпочтений. Хотя я нахожу, что наличие кучу других делает вещи более спагетти похожими на код :-) – TheMethod

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; 
} 
Смежные вопросы