codeigniter - 从视图加载库?

Pat*_*ick 10 codeigniter

我有一些数据,我必须显示为表格.

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

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

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

    echo $this->table->generate($events);
    ?>
Run Code Online (Sandbox Code Playgroud)

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

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

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

Chr*_*mey 26

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

$CI =& get_instance();
$CI->load->library('library_name');
$CI->library_name->yourFunction();
Run Code Online (Sandbox Code Playgroud)

  • 在这个类似mvc的东西里,这不是很好的待办事项,但是它有效 (2认同)

Sar*_*raz 13

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

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

echo $this->table->generate($events);
?>
Run Code Online (Sandbox Code Playgroud)

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


小智 5

要回答您做错了什么,您应该知道视图中未声明CodeIgniter类,这是有原因的-从HTML中提取PHP代码。视图应包含最少的PHP代码(基本循环,条件)。

考虑到这一点,您应该按常规将库包含在控制器中,如下所示;

控制者

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

$this->load->view(....);
Run Code Online (Sandbox Code Playgroud)

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

视图

<?php echo $events_table; ?>
Run Code Online (Sandbox Code Playgroud)


Kan*_*iya 5

您可以将库自动加载到 config/autoload.php

$autoload['libraries'] = array('database','session','table');
Run Code Online (Sandbox Code Playgroud)

然后,您可以简单地在视图中调用这些函数。

echo $this->table->generate($events);
Run Code Online (Sandbox Code Playgroud)

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