我有一些数据,我必须显示为表格.
我想我应该从控制器传递数据为$ 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)
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)
您可以将库自动加载到 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)
当我创建动态菜单标题时,这对我很有用。我自动加载了具有动态菜单创建功能的库,然后我只是从视图中简单地调用了该功能,这是一种不好的做法。