codeigniter - 从视图加载库?

时间:2010-04-12 14:22:30

标签: codeigniter

我有一些数据需要显示为表格。

我想我应该从控制器传递数据为$ data ['events'] = array(.....

然后加载视图以显示它们。

        <?php
    $this->load->library('table');

    echo $this->table->generate($events);
    ?>

这不起作用 - 它给出致命错误:在非对象上调用成员函数generate()

如果我在控制器中粘贴相同的代码,显然使用 - &gt; generate($ data ['events']表格会正确显示。

我是否应该获取视图无法加载库,或者我做错了什么? 或者我应该在控制器中捕获库的输出并将其发送到视图?

8 个答案:

答案 0 :(得分:26)

如果您需要在视图中调用库(及其函数),可以执行以下操作:

$CI =& get_instance();
$CI->load->library('library_name');
$CI->library_name->yourFunction();

答案 1 :(得分:12)

您应该在控制器中运行以下代码:

<?php
$this->load->library('table');

echo $this->table->generate($events);
?>

并将数据存储在变量中,然后发送到视图。

答案 2 :(得分:4)

要回答你做错了什么,你应该知道CodeIgniter类没有在视图中声明,并且出于某种原因就是这种情况 - 从你的HTML中抽象你的PHP代码。视图应包含最少的PHP代码(基本循环,条件)。

考虑到这一点,您应该按照以下方式在控制器中正常包含库;

<强>控制器

$this->load->library('table');
$data['events_table'] = $this->table->generate($events);

$this->load->view(....);

在视图中,您可以简单地回显数据。尽管CodeIgniter允许使用简写标记,但您应该使用标准的PHP标记来保持适用于保存代码的任何约定。

查看

<?php echo $events_table; ?>

答案 3 :(得分:3)

这是MVC的一种错误方法。您不需要在视图中加载库,因为所有视图都是从一个CONTROLLER加载的,因此每个外部助手或库都应该从控制器加载并使用或发送到视图

的问候,
佩德罗

答案 4 :(得分:3)

注意应该:CodeIgniter是灵活的,它允许你以错误的方式做事。这只会让它变得更加困难。你可以在视图中做几乎所有事情,即使你不应该这样做;但是必须在控制器中加载助手,模型和视图。

答案 5 :(得分:3)

您可以在config/autoload.php

中自动加载库
$autoload['libraries'] = array('database','session','table');

然后您只需在视图中调用这些功能即可。

echo $this->table->generate($events);

当我创建动态菜单标题时,这对我很有用。我自动加载了具有动态菜单创建功能的库,然后我简单地从视图中调用该函数,这是不好的做法。

答案 6 :(得分:0)

在控制器或模型中使用

$this->load->library('mylib');
$mylib=$this->mylib;
$data['mylib']=$mylib;
$this->load->view('myview',$data,false);

并且在视图中您可以直接使用库:

$mylib->myfunction();

它不是类似MVC的解决方案,但如果你需要,它可以工作。

答案 7 :(得分:0)

只需在控制器上加载库,然后使用它查看。

<强>控制器:

$this->load->library('table');
$data = array(
    array(1,2,3,4,5),
    array(1,2,3,4,5),
    array(1,2,3,4,5),
);
$this->load->view('the_view', compact('data'));

查看:

echo $this->table->generate($data);