【问题标题】:Passing value from controller to view将值从控制器传递到视图
【发布时间】:2014-03-03 15:35:57
【问题描述】:

我的模型中有一个使用连接的查询并将查询结果作为数组返回

result_array();

然后我将该结果返回给我调用模型的控制器。

$data = $this->Model->show();

        foreach($data as $val)
        {
        $arr[$val['recipename']] = $val['componentname'];
        }

        if($data != null)
        {
        $this->load->view('Admin\success',$arr);
        }

我最初没有 $arr 值。我只是将它添加到那里以使数组更清晰。无论如何,有或没有。

var_dump($data)var_dump($arr) 或者即使我 $recipename$componentname 仍然为空。

返回空值。说它们是未定义的。

我不知道出了什么问题。

我读了另一个问题。这就是为什么我制作了 $arr 以便我可以将其设为单个数组,因此当它传输时,它将被提取并尝试回显它们但无济于事。

Codeigniter passing data from controller to view

编辑:

查询工作正常,它返回值。

$sample = $this->db->select('recipe.recipename,component.componentname')->from('recipe')
               ->join('recipecomponent','recipe.recipeid = recipecomponent.recipeid')
               ->join('component','component.componentid = recipecomponent.componentid')
               ->group_by('recipe.recipeid')
               ->get()
               ->result_array();

                return $sample;

【问题讨论】:

  • 您检查过$this->Model->show(); 是否返回任何内容吗?
  • 可能不应该使用名为 model 的模型。
  • $arr 在 if 语句中超出范围 - 除非您已在此代码之外声明它
  • 为了简单起见,我只使用了模型名称,因为它在我的代码上有所不同,是的,我在每个操作通过 $this->load->view 之前使用了 print_r() 并且它们具有值。它在视图传递后唯一的 null。

标签: php codeigniter


【解决方案1】:

一旦您将数据数组传递到视图,数组键就会变成变量。例如,在您的 foreach 循环之后,您的 $arr 变量是这样的数组

array [
    'cheese' => 'brie'
    'cookie' => 'chocolate chips'
]

然后,您将通过在视图中执行以下操作来访问 $arr['cheese']

echo $cheese;

尝试访问视图中的$data$arr 将不起作用,因为它们不在范围内

【讨论】:

  • $recipename 和 $componentname 未定义。为此,我制作了 $arr assoc 数组进行尝试,但失败了。
  • 但请记住 $val['recipename'] 中的值将成为变量名。因此,如果$val['recipename'] 包含一个名为“recipe_one”的字符串,那么$recipe_one 将成为视图中的变量名
  • 啊,这就是解决方案。我理解 assoc 数组的提取错误。所以变量名将是我的 assoc 中的 [key] 所以如果我的键是 [key1]=>number 1 echo $key1;将导致“数字 1”
  • 如果数组是这个 Array ([0] => Array ()),我将如何回显它被提取,所以 obv 键为 0。我只是不能 print_r($0) ;现在可以吗?
  • 我想出的一个解决方案是将它包装在另一个具有明确键名的数组中 $arr = array('info'=>$data);所以在视图中,我只需要循环 $info。或 create_Table($info);
【解决方案2】:

$data 很可能是空的,而您正在迭代一个空数组。

一个简单的调试方法如下:

调试数组或对象:

echo '<div style="padding:15px; background-color:white;"><pre>'.print_r($data, true).'</pre></div>';

echo '<div style="padding:15px; background-color:white;"><pre>'.print_r($this->Model->show(), true).'</pre></div>';

您还应该在 __construct 中打开错误报告,如下所示:

error_reporting(E_ALL);

如果 print_r() 向您显示一个空数组,那么您的模型没有返回任何数据,您的问题的答案可能是您需要修复您的查询。

【讨论】:

  • 查询工作正常。正如我所说,在加载视图之前,我对每个操作都使用了 print_r,它从我的查询中打印出一组值。我将包括我对该问题的查询以澄清这一点。
  • 我明白了。哈哈,这让我想起了我曾经读过的东西:When I want 100 answers then I'll ask the 50 people that I work with. When I want the correct answer then I read the manual/docs/instructions. CI Views
  • 在将数据数组传递给视图时,我误解了 CI 的提取部分。好吧,我想如果我只阅读它,我就不必问这个问题了。文档真的很重要啊
  • 是的,但不要出汗。我只是喜欢每隔一段时间就传递一下这个轶事:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多