我们应该在CodeIgniter应用程序中处理mysql查询的位置? 例如,在一个简单的项目中我们喜欢这样:
控制器:
class Blog extends CI_Controller {
function posts(){
$data['query'] = $this->blog_model->index_posts();
$this->load->view('blog_view', $data);
}
}
并在视野中:
<?php
while ($post = mysql_fetch_object($query)):
?>
<div>
<p><?= $post->body; ?></p>
</div>
<?php endwhile; ?>
但是,如果我们想在打印前对帖子做一些事情应该在哪里进行呢? 例如,我想编写一个函数来格式化post的主体并在执行echo之前将body传递给它。
根据CoeIgniter的结构和推荐做法,它应该放在哪里? (最佳选择)
答案 0 :(得分:2)
以下是推荐的内容:
控制器:
function posts() {
$this->load->model("blog_model");
$data['rows'] = $this->blog_model->index_posts();
$this->load->view("blog_view", $data);
}
型号:(blog_model.php)
function index_posts() {
$this->load->database();
$query = $this->db->get('your_table');
$return = array();
foreach ($query->result_array() as $line) {
$line['body'] = ... do something with the body....
$return[] = $line;
}
return $return;
}
查看:(blog_view.php)
<?php foreach ($rows as $line): ?>
<div>
<p><?php echo $line['column']; ?></p>
</div>
<?php endforeach; ?>
基本上发生的事情是你的模型返回一个多维数组,该数组传递给视图并使用foreach()
循环进行处理。
答案 1 :(得分:0)
如果要重用该函数,请创建一个帮助器。如果您只想将此功能放入控制器并从该控制器调用一次。
模型仅用于访问数据库或者在其他一些情况下,但主要用于访问数据库中的内容或编辑,删除等,并将结果发送到控制器以进行进一步处理。
在你的情况下,我会坚持帮助。
E.g。你将创建一个文件 top_mega_best_functions.php 并将其放在帮助文件夹中。
比你写的例如
之类的东西function red_text($input) {
echo '<span style="color: red;">';
echo $input;
echo '</span>';
}
然后在自动加载器文件中加载帮助程序或在使用之前加载。
并在您的视图或控制器中使用
$blablabla = "This text will be red";
red_text($blablabla);