将值从模型传递到 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->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 发布请求将值从一个视图传递到另一个视图
Informatica 是不是可以将值从 informatica 映射动态传递到 oracle 中的视图