【问题标题】:Passing Array from Model to Controller to View in CodeIgniter将数组从模型传递到控制器以在 CodeIgniter 中查看
【发布时间】:2013-05-24 14:15:22
【问题描述】:

我有一个模型,它向 CodeIgniter 中的控制器发送错误响应,然后将其传递给只是一个 JSON 编码器的视图。这是模型中的数组。

return $posts[] = array('complete'=>0,'error'=>1003, 'message'=>'Username already exists');

我遇到的问题是我需要 $posts 变量后面的方括号,因为有时我需要一系列错误。但是,当我将单个数组传递给视图时,它会在没有方括号的情况下对 JSON 进行编码,但是当我有多个数组时,它包含方括号,我每次都需要 JSON 中的方括号。这是控制器...

$data['data'] = $this->logins_model->signup($post_data);  
$this->load->view('json', $data);  

这里是视图...

header('Content-type: application/json');  
$response['response'] = $data;  
echo json_encode($response); 

我需要 JSON 响应看起来像这样

{
    "response": [
        {
            "complete": 0, 
            "error": 1003, 
            "message": "Username already exists"
        }
    ]
}  

不是这个!

{
    "response": {
        "complete": 0, 
        "error": 1003, 
        "message": "Username already exists"
    }
}

【问题讨论】:

  • json 格式的字符串与您的模型返回的数组不匹配(以及稍后的json_encoded)。请贴出相关代码。

标签: php arrays json codeigniter-2


【解决方案1】:

既然你想在json 中获取数组,你也应该在 php 数组中拥有它(即数据结构应该满足)。所以$response['response'] = $data; 应该是$response['response'] = array($data);

在您的示例中,var_dump($response); 给出:

array(1) {
  ["response"]=>
  array(3) {
    ["complete"]=>
    int(0)
    ["error"]=>
    int(1003)
    ["message"]=>
    string(23) "Username already exists"
  }
}

如您所见,$response['response']json 的对象。

当您将 $response['response'] = $data; 替换为 $response['response'] = array($data); 时,您想要在 json 中转换的数据结构将变为:

array(1) {
  ["response"]=>
  array(1) {
    [0]=>
    array(3) {
      ["complete"]=>
      int(0)
      ["error"]=>
      int(1003)
      ["message"]=>
      string(23) "Username already exists"
    }
  }
}

这将为您提供所需的输出,因为json_encode 预计$response['response'] 中可能还有其他项目。

Demo

编辑 您的模型应该返回一维数组。例如:

return array('complete'=>0,'error'=>1003, 'message'=>'Username already exists');

您应该将它分配给另一个包含所有错误消息的数组:

$data['data'][] = $this->logins_model->signup($post_data);
$this->load->view('json', $data);  

Demo 2

【讨论】:

  • 这适用于如果有一条错误消息但如果有多个错误消息则有双方括号。
  • 问题是错误数组的数组是在 logins_model 中构建并返回的,它不能与 $data 变量的其他错误数组组合。例如for($i = 0; $i<10; $i++) { $posts[] = array('complete'=>0,'error'=>1003, 'message'=>'Username already exists'); } return $posts;
  • @StuartTheY 如果错误数组是这样构造的,你应该得到正确的输出。让我发布另一个演示。 codepad.viper-7.com/qzK2GM
  • 是的,但是现在如果您将 array() 放在上一个演示的第 14 行的 $data 变量周围,将会有一组额外的括号,明白我的意思吗?它需要能够支持单个数组和仅包含一组方括号的数组数组。
  • 哦,如果我出于某种原因将它分成两行,我想它适用于单个数组。 ` $posts[] = array('complete'=>0, 'error'=>1003, 'message'=>'用户名已经存在');返回 $posts;`
【解决方案2】:

在您的视图中,将 $post 定义为一个数组并从那里删除方括号。要在视图中检查结果,请使用 print_r 而不是 echo。这将准确显示检索到的数据量。

【讨论】:

  • 我需要模型中的方括号,因为有时我会构建一个数组数组,将它们添加到帖子数组中,然后我省略了 [] 然后数组只添加了最后一项它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
  • 2012-11-04
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
相关资源
最近更新 更多