在codeigniter中处理mysql查询的位置?

时间:2012-08-14 14:19:30

标签: php sql codeigniter

我们应该在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的结构和推荐做法,它应该放在哪里? (最佳选择)

  • 在控制器中? (如果是,如何使用它)
  • 在视图中?
  • 写一个帮手?
  • 其他方法?

2 个答案:

答案 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);