ООП MVC - модель или контроллер для проверки типа возвращаемых данных? - PullRequest
0 голосов
/ 16 января 2011

Иногда мне нужны такие данные, как массив, а иногда мне нужны те же данные, что и в json.

Где бы вы проверили, является ли вызов ajax в контроллере или модели или ... Какой из них лучше?

Проверить, является ли ajax-вызов в контроллере

function my_controller(){
    //getdata from model
    $data=$this->my_model();
    if(THIS_IS_AJAX_CALL){
        echo json_encode($data);
    }else{
        return $data;
    }
}

function my_model(){
    //get the data from db
    return $data;
}

Передать тип в качестве аргумента модели:

function my_controller(){
    if(THIS_IS_AJAX_CALL){
        return $this->my_model('json');
    }else{
        return $this->my_model();
    }
}

function my_model($type=''){
    //get the data from db
    if($type='json'){
        return json_encode($data);
    }else{
        return $data;
    }
}

Ответы [ 2 ]

1 голос
/ 16 января 2011

Цитата из учебника Codeigniter, объясняющего MVC :

  • Модель представляет ваши структуры данных.Обычно ваши классы моделей будут содержать функции, которые помогут вам извлекать, вставлять и обновлять информацию в вашей базе данных.

  • Представление - это информация, которая представляется пользователю.Представление обычно является веб-страницей, но в CodeIgniter представление также может быть фрагментом страницы, таким как верхний или нижний колонтитул.Это также может быть страница RSS или любой другой тип «страницы».

  • Контроллер служит посредником между Моделью, Представлением и любыми другими ресурсами, необходимыми для обработкиHTTP-запрос и создание веб-страницы.

Я думаю, что вы должны проверить в контроллере (это не имеет ничего общего с структурами данных) заголовок, чтобы увидеть, является ли это вызовом ajax, потому что1019 * jquery устанавливает заголовки .Если это Ajax-вызов, вы должны выполнить желаемое преобразование json_encode.Я думаю, что ваш код должен выглядеть примерно так, как показано ниже:

function is_xhr() {
  return @ $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] === 'XMLHttpRequest';
}

$data = /* get from model */
if( is_xhr() ){
  // Not explicitly needed, but we like being accurate, right?:
  header('Content-type: application/json');

  echo json_encode($data);
  exit(); // We don't need to render anything else
} else {
  echo $data;
}
1 голос
/ 16 января 2011

Контроллер. Модель не заботится о том, как данные должны быть представлены пользователю, только сами данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...