在控制器中使用foreach,并在视图中使用输出


Use of foreach in the Controller and use of output it in the view

我使用codeigniter。如何将foreach放在控制器中,并在视图中只使用输出。(我不想把foreach放到视图中)?

foreach ($output->result() as $row)
{
    echo '<option>'.$row->name.'</option>';
}

这是我现在的看法:

<select>
<option disabled="disabled" value="">selected</option>
<?php 
foreach ($output->result() as $row) { 
   echo '<option>'.$row->name.'</option>'; 
} 
?>
</select>

我想让这个在视图中:

<select>
<option disabled="disabled" value="">selected</option>
<?php 
    echo $output_foreach_from_Controller; 
?>

尽管逻辑希望foreach位于视图(毕竟这是表示的事情,控制器不应该做任何类型的数据操作)。由于您正在使用db方法,您可能希望将其放在模型中,尽管"逻辑上"也是错误的…)

不管怎样,说到你的问题……你可以把它赋值给一个变量,然后传递给视图: 在控制器:

function whatever()
{
$string = '';
foreach ($output->result() as $row) { 
   $string .= '<option>'.$row->name.'</option>'; 
} 
$data['foreach_output'] = $string;
$this->load->view('viewfile',$data);
}
在视图:

<select>
<?php echo $foreach_output;?>
</select>

也许你可以使用'form_dropdown' form_helper。参见:http://codeigniter.com/user_guide/helpers/form_helper.html我希望这对你有帮助。

我认为在控制器中你可以分配值…到一个变量,然后将该变量传递给视图。看看下面给出的东西:

<?php 
$variable = "";
foreach ($output->result() as $row) {
   $variable = $variable . '<option>'.$row->name.'</option>';
}
$data["option_values"] = $variable;
$this->load->view('view-name', $data);
?>



然后在你想要

的视图中返回"$option_values"变量

我认为你应该把foreach放到视图中。你也可以使用模板版本的foreach来使它看起来更漂亮:

<select>
    <option disabled="disabled" value="">selected</option>
    <?php foreach ($output->result() as $row): ?>
    <option><?php echo $row->name.; ?></option>
    <?php endforeach; ?> 
</select>

这样做的原因是,如果在控制器中生成HTML,输出的内容不会立即明显。