【问题标题】:Codeigniter right way to display query resultsCodeigniter 显示查询结果的正确方法
【发布时间】:2014-04-01 14:03:36
【问题描述】:

这是我输出查询结果的方式,但我想知道这是否是正确的方式.. 在我看来,我正在做一些 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 逻辑脱离我的视图,放在我的控制器中的某个地方并有一个更清晰的视图?

【问题讨论】:

    标签: php codeigniter view controller modal-dialog


    【解决方案1】:

    你的视图应该有尽可能少的 PHP。

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

    你的 for 循环似乎有点不必要。你真的只想要一个“开始日期”和“结束日期”。您可以将其放入模型或控制器中,具体取决于您是否希望每次调用 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 -->
    

    【讨论】:

    • 这确实更干净,也是我想要的样子。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多