【问题标题】:passing values from model to view in CI将值从模型传递到 CI 中的视图
【发布时间】:2010-10-27 19:02:42
【问题描述】:

我在 CI 中有这个库,可以检索我最新的 Twitter 更新。它具有将我的最新更新作为对象发送到我的控制器的功能。

我想在我的页面页脚显示这些 twitter 更新,以便随时可见。

现在我的问题是如何直接从视图中调用它们?我知道这在 MVC 中不是一个好习惯,但我不知道我还能如何做到这一点。 我的控制器目前负责处理我所有不同的页面(它是一个小网站),我认为在控制器中的每个页面功能的末尾调用我的 twitter 类然后将其发送到视图不是一个很好的做法.

我通常在我的控制器中执行此操作:

<?php
    function index(){
    $data['page'] = 'home';
    //i don't want to call my twitter class here every single time I write a new page. (DRY?!)
    $this->load->view('template', $data);
    }
?>

它会加载如下所示的“模板”视图:

<?php
$this->load->view('header');

$this->load->view('pages/'.$page);

$this->load->view('footer');
?>

那么有什么建议我应该怎么做?

【问题讨论】:

    标签: class codeigniter model view


    【解决方案1】:

    我有一个辅助库,它获取一个页面 Partial 并将其包装在主主题中。您可以使用 load-&gt;view 上的可选参数来呈现为字符串。

    然后,当您呈现母版页时,您可以加载 twitter 更新并显示它们。不过,我强烈建议您至少将 twitter 响应缓存 5 分钟,这将为您节省大量开销。

    例子:

    // Controller somwhere:
    $content = $this->load->view('pages/'.$page, array(), true);
    $this->myLibrary->masterPage($content);
    
    
    // Your library:
    function masterPage($content)
    {
    
        $twitterData = $this->twitter->loadStuff(); // whatever your function is
    
        $twitter = $this->load->view('twitter_bar', array('data' => $twitterData), true);
    
        $this->load->view('master', array('content' => $content, 'twitter' => $twitter);
    }
    

    【讨论】:

    • 谢谢,这样做了。有一个加载视图的助手是个好主意。
    • :) 谢谢,很高兴能帮上忙。我一直不明白为什么母版页的想法从未融入 CI。总是让我大吃一惊。
    【解决方案2】:

    另一种方法是使用基本控制器。我所有的控制器都扩展了我的自定义基本控制器,它在每个页面上都保存了我需要的东西,例如包含当前用户的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      • 2014-04-03
      • 2011-02-01
      • 2016-08-13
      相关资源
      最近更新 更多