将值从模型传递到 CI 中的视图

Posted

技术标签:

【中文标题】将值从模型传递到 CI 中的视图【英文标题】:passing values from model to view in 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');
?>

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

【问题讨论】:

【参考方案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】:

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

【讨论】:

以上是关于将值从模型传递到 CI 中的视图的主要内容,如果未能解决你的问题,请参考以下文章

通过 Laravel 中的 AJAX 发布请求将值从一个视图传递到另一个视图

将值从部分值传递到 mvc 中的布局视图

Informatica 是不是可以将值从 informatica 映射动态传递到 oracle 中的视图

如何将值从mysql传递到创建视图中的表单字段

如何将值从活动传递到 Android Studio 中的类?

如何将值从基本适配器传递到 Android 中的 Activity