0

我们应该在 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 之前将正文传递给它。

根据 CoeIgniter 的结构和推荐的做法,它应该放在哪里?(最佳选择)

  • 在控制器中?(如果有,如何使用)
  • 在视图中?
  • 写个助手?
  • 其他方法?
4

2 回答 2

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()循环进行处理。

祝你好运!

于 2012-08-14T14:23:51.110 回答
0

如果您想重用该功能,请创建一个助手。如果您只想将此功能放入您的控制器并从该控制器调用。

模型仅用于访问数据库或可能在其他少数情况下,但主要用于访问数据库中的内容或编辑、删除等,并将结果发送到控制器进行进一步处理。

在你的情况下,我会坚持使用助手。

例如,您将创建一个文件top_mega_best_functions.php并将其放在 helpers 文件夹中。

比你写在那里,例如

function red_text($input) {

    echo '<span style="color: red;">';
    echo $input;
    echo '</span>';
}

然后在您的自动加载器文件中加载帮助程序或在使用前加载。

并在您的视图或控制器中使用

$blablabla = "This text will be red";

red_text($blablabla);
于 2012-08-14T15:45:27.430 回答