我有一些数据需要显示为表格。
我想我应该从控制器传递数据为$ data ['events'] = array(.....
然后加载视图以显示它们。
<?php
$this->load->library('table');
echo $this->table->generate($events);
?>
这不起作用 - 它给出致命错误:在非对象上调用成员函数generate()
如果我在控制器中粘贴相同的代码,显然使用 - &gt; generate($ data ['events']表格会正确显示。
我是否应该获取视图无法加载库,或者我做错了什么? 或者我应该在控制器中捕获库的输出并将其发送到视图?
答案 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);