【问题标题】:Using CodeIgniter is it bad practice to load a view in a loop使用 CodeIgniter 在循环中加载视图是不好的做法
【发布时间】:2009-11-12 21:51:22
【问题描述】:

我刚开始使用 CodeIgniter,我想知道如果我将这样的代码放在一个循环中会减慢速度。

    $data['title'] = 'the title';
    $data['content'] = 'blah blah blah';
    $this->load->view('result', $data);

我不完全确定 CodeIgniter 是如何处理事情的,或者 PHP 本身是如何处理的。例如,如果我这样做。每次迭代都会读取文件吗?

    $data['title'] = 'the title';
    $data['content'] = 'blah blah blah';
    include 'result.php';

也可以在循环中加载控件,或者我是否通过将控件放入循环中丢失了一些基本的东西?谢谢。

附加信息。 我有用户个人资料的搜索结果......我正在考虑制作一个精简版的个人资料视图以显示在搜索结果页面上。为此使用视图会是不好的做法吗?

【问题讨论】:

  • 为什么需要包含 $this->load->view('result', $data);在循环内?多一点信息会很好。
  • 是的。听起来很奇怪。循环加载视图

标签: php codeigniter loops include


【解决方案1】:

我不建议从您的角度调用您的模型。在尝试遵守 MVC 框架标准时,这不是最佳实践。从控制器调用模型并将“用户”数组作为 $data 的一部分传递到视图中。现在您可以将 $users 数组作为视图中的变量来访问。与您所拥有的类似,但这会将模型的访问权重新返回到控制器中。

控制器

$data['title'] = 'the title';
$data['content'] = 'blah blah blah';
$data['users'] = $this->user_model->get_users();
$this->load->view('result', $data);

查看

<?php foreach ($users as $user) {
    echo '<p>' . $user->first_name . '</p>';
    echo '<p>' . $user->last_name . '</p>';
}?>

【讨论】:

    【解决方案2】:

    考虑将循环从控制器移动到视图文件(在控制器中,您必须在加载视图文件之前准备所有数据)。您将只有一次调用加载视图文件,并且在视图文件中您可以根据需要打印出循环周期中的信息。

    【讨论】:

      【解决方案3】:

      在视图中循环。

      <div>
          <?php foreach ($this->user_model->get_users() as $users): ?>
              <p><?php echo $user->first_name;?></p>
              <p><?php echo $user->last_name;?></p>
          <?php endforeach; ?>
      </div>
      

      本示例直接从codeigniter论坛讨论过多次的模型中获取数据。

      【讨论】:

      • 请不要从视图中调用模型。您的控制器应该从模型中获取数据,然后将其传递给您的视图。
      • @Ferdy。这是最好的办法。我不同意,如果需要,您不应该这样做。请参阅:phpwact.org/pattern/model_view_controller
      • 我的立场是正确的,你让我相信在某些情况下它并没有我想象的那么糟糕。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 2013-09-04
      • 2018-10-19
      • 2013-05-02
      • 2023-04-04
      相关资源
      最近更新 更多