Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php OOP MVC-检查返回数据类型的模型或控制器?_Php_Ajax_Oop_Json_Model View Controller - Fatal编程技术网

Php OOP MVC-检查返回数据类型的模型或控制器?

Php OOP MVC-检查返回数据类型的模型或控制器?,php,ajax,oop,json,model-view-controller,Php,Ajax,Oop,Json,Model View Controller,有时我需要数组之类的数据,有时我需要与json相同的数据 您会在哪里检查是ajax调用,是在控制器中还是在模型中,还是。。。哪一个更好 测试是否是ajax调用控制器 function my_controller(){ //getdata from model $data=$this->my_model(); if(THIS_IS_AJAX_CALL){ echo json_encode($data); }else{ retur

有时我需要数组之类的数据,有时我需要与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;
    }
}

控制器。模型不关心数据需要如何向用户表示,只关心数据本身。

引用自:

  • 模型表示您的数据结构。通常,模型类将包含帮助您检索、插入和更新数据库中信息的函数

  • 视图是呈现给用户的信息。视图通常是网页,但在CodeIgniter中,视图也可以是页眉或页脚之类的页面片段。它也可以是RSS页面,或任何其他类型的“页面”

  • 控制器充当模型、视图和处理HTTP请求和生成网页所需的任何其他资源之间的中介

我认为您应该在controller(这与数据结构无关)头部检查它是否是ajax调用,因为。如果是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;
}

CODEIGITITER描述的是被动MVC(其中模型不知道它在三元组中的使用,而只是一个浅的数据库接口)。@马里奥:那么,你建议什么来回答我的问题?”莫吉姆:好吧,我认为你的问题是一个“红鲱鱼”。它不应该在伪MVC三元组中处理,而应该在引导代码中处理。UI输出和API响应返回相同内容的情况太少了。