我使用Codeigniter和Smarty作为我的模板引擎。我有一个主模板 (master.tpl)我在我的页面模板中继承。在我的一个页面中,我试图访问从数据库中提取的数据,但我还没有成功。
我的模型看起来像这样:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
Class company extends CI_Model
{
public function __construct()
{
// Call the constructor
parent::__construct();
// Load database access
$this->load->database();
}
public function get_companies()
{
// Query the companies table
$query = $this->db->get('companies');
return $query->result();
}
}
我的控制器看起来像这样:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Companies extends CI_Controller {
public function index()
{
// Load the companies model
$this->load->model('company');
$companies = $this->company->get_companies();
$data['complist'] = $companies;
//load the department_view
$this->load->view('companies',$data);
}
}
这是我的网页浏览的主要部分:
...
<tbody>
{foreach from=$companies item=company}
<li>{$data.name}</li>
{/foreach}
</tbody>
...
在我的master.tpl中,在页面视图中继承的代码块如下所示: ... {block name = content} {/ block} ...
我只是想显示从我的数据库中检索到的公司列表,但我无法弄清楚如何访问保存数据的数组。我做错了什么?
编辑: 以下是我收到的错误消息:
Message: Undefined index: companies
Message: Trying to get property of non-object
答案 0 :(得分:0)
尝试制作像$data['companies'] = $this->company->get_companies();
更好地自动加载config / autoload.php中的数据库库。
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Companies extends CI_Controller {
public function index() {
$this->load->model('company');
$data['companies'] = $this->company->get_companies();
$this->load->view('companies',$data);
}
}
模型
让模型类将公司更改为公司
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Company extends CI_Model {
public function __construct() {
parent::__construct();
}
public function get_companies() {
$query = $this->db->get('companies');
if ($query->num_rows() > 0) {
return $query->result();
// or
// return $query->result_array();
} else {
return false;
}
}
在视图中我知道你使用smarty但是php方式示例普通的php在视图上有巧妙的例子。
<?php foreach ($companies as $company) {?>
<?php echo $company['name'];?>
<?php }?>
Smarty的
<tbody>
{foreach from = $companies item = $company}
<tr>
<td>{$company.name}</td>
</tr>
{/foreach}
</tbody>
答案 1 :(得分:0)
正如Tpojka所说,我试图访问错误的变量,所以我不得不改变它,但foreach循环中的语法是$ companies-&gt; name。这就是模板中现在的循环:
{foreach from=$companies item=company}
<tr>
<td>{$company->name}</td>
<td>{$company->address}</td>
<td>{$company->city}</td>
<td><a href="tel:{$company->phone}">{$company->phone}</a><td>
<td><a href="mailto:{$company->email_address}">{$company->email_address}</a></td>
<td class="center">
<a class="btn btn-success" href="#">
<i class="fa fa-search-plus "></i>
</a>
<a class="btn btn-info" href="#">
<i class="fa fa-edit "></i>
</a>
<a class="btn btn-danger" href="#">
<i class="fa fa-trash-o "></i>
</a>
</td>
</tr>
{foreachelse}
No records found.
{/foreach}