Codeigniter以正确的方式显示查询结果

时间:2014-04-01 14:03:36

标签: php codeigniter view controller modal-dialog

这是我输出查询结果的方式,但我想知道这是不是正确的方法.. 因为我在我的视图中做了一些php逻辑,我更喜欢把它放在我的控制器中,不是吗?

有人可以告诉我这是否应该如何完成,或者我如何改进我的代码?

位指示:

public function reservations()
{
    $this->load->model('admin_model');
    $data = $this->admin_model->get_reservations();

    $this->load->view('view_reservations', $data);
}

型号:

function get_reservations()
{
    $this->db->select('*');
    $this->db->from('t_reservation');
    $data['query'] = $this->db->get();  

    return $data;
}

查看:

<div class="row">
    <?php 
        foreach ($query->result() as $row):
          for($i=0; $i<$row->days; $i++)
          {
            $date = date("d-m-Y", strtotime(date("Y-m-d", strtotime($row->date)) . " +".$i." day"));
            $reservations[$i] = $date;
          } 
          echo $row->name;
          echo $row->price;
          echo $reservations[0]. '-'.$reservations[$row->days-1];
        endforeach; 
    ?>
</div><!-- /.row -->

那么,有没有办法让我的视图中的php逻辑,put在我的控制器的某个地方,并有一个更清晰的视图?

1 个答案:

答案 0 :(得分:3)

您的观点应该尽可能少的PHP。

您的控制器应具有$data声明,您的模型应从数据库返回数据。

您的for循环似乎有点不必要。你真的只想要一个开始日期&#39;和&#39;结束日期&#39;。您可以将其放入模型或控制器中,具体取决于您是否希望每次调用get_reservations时都返回这些内容。

<强>控制器

public function reservations()
{
    $this->load->model('admin_model');
    $data['reservations'] = $this->admin_model->get_reservations();
    $this->load->view('view_reservations', $data);
}

<强>模型

function get_reservations()
{
    $reservations = $this->db->get('t_reservation')->result();

    foreach ($reservations as $reservation)
    {
        $reservation->start_date = date("d-m-Y", strtotime($reservation->date));
        $reservation->end_date = date("d-m-Y", strtotime(date("Y-m-d", strtotime($reservation->date)) . " +".$reservation->days." day"));
    }

    return $reservations;
}

查看 我已经编辑了您的观点,因为我猜测您希望每个结果都在一个单独的行中吗?

<? foreach ($reservations as $reservations): ?>
    <div class="row">
        <?= $reservation->name ?>
        <?= $reservation->price ?>
        <?= $reservation->start_date ?> - <?= $reservation->end_date ?>
    </div><!-- /.row -->
<? endforeach ?>

根据您希望如何显示数据,您可以在控制器中使用foreach循环,并加载多个视图:

<强>控制器

public function reservations()
{
    $this->load->model('admin_model');
    $reservations = $this->admin_model->get_reservations();

    foreach ($reservations as $reservation)
    {
        $data['reservation'] = $reservation;
        $this->load->view('view_reservation', $data);    
    }
}

查看

<div class="row">
    <?= $reservation->name ?>
    <?= $reservation->price ?>
    <?= $reservation->start_date ?> - <?= $reservation->end_date ?>
</div><!-- /.row -->