Php 通过帮助文件加载模型会导致屏幕空白
我正在做一个基于Codeigniter框架的系统,并使用数据库中的大量数据 困扰我的是,在每一个函数中,我都需要声明下面方形框中的内容。每次我用可视内容创建一个新函数时,我都需要重新填充它。难道没有办法把它简单化吗?例如,在普通php中,您可以:Php 通过帮助文件加载模型会导致屏幕空白,php,database,codeigniter,model,controller,Php,Database,Codeigniter,Model,Controller,我正在做一个基于Codeigniter框架的系统,并使用数据库中的大量数据 困扰我的是,在每一个函数中,我都需要声明下面方形框中的内容。每次我用可视内容创建一个新函数时,我都需要重新填充它。难道没有办法把它简单化吗?例如,在普通php中,您可以: include_once 'topmenu_dbs'; 因为现在我要在队列中添加另一个数据库查询,这就需要我单独更改所有函数,这需要一些时间。如果我将来需要做更多的事情,同样的旅行也是必要的 public function entre() {
include_once 'topmenu_dbs';
因为现在我要在队列中添加另一个数据库查询,这就需要我单独更改所有函数,这需要一些时间。如果我将来需要做更多的事情,同样的旅行也是必要的
public function entre()
{
$this->load->model('mylibrary');
$data['crew_pizza_book']=$this->mylibrary->crew_pizza_book();
$data['lanare']=$this->mylibrary->lanare();
$data['kiosk_rec']=$this->mylibrary->kiosk_rec();
$this->load->view('header');
$this->load->view('topmenu', $data);
$this->load->view('entre');
$this->load->view('footer');
}
根据我迄今为止收到的帮助,我对该问题进行了更新:
我添加了一个helper文件(init_helper.php)并将其放在application/helpers中
<?php
function init_data()
{
$CI=get_instance();
$CI->load->model('mylibrary');
$data['crew_pizza_book']=$this->mylibrary->crew_pizza_book();
$data['lanare']=$this->mylibrary->lanare();
$data['kiosk_rec']=$this->mylibrary->kiosk_rec();
return $data;
}
?>
在我的模型“mylibrary”中,它如下所示:
<?php
class Mylibrary extends CI_Model
{
function crew_pizza_book(){
$query=$this->db->query("SELECT * FROM crew_pizza_book ORDER BY pizza");
return $query->result();
}
function lanare(){
$query=$this->db->query("SELECT * FROM crew_lanare ORDER BY id ASC");
return $query->result();
}
function kiosk_rec(){
$query=$this->db->query("SELECT * FROM crew_kiosk_rec");
return $query->result();
}
}
?>
$data['crew_pizza_book']="a";
$data['lanare']="b";
$data['kiosk_rec']="c";
这将生成一个空白屏幕
当我尝试像这样设置数组的静态值时:
<?php
class Mylibrary extends CI_Model
{
function crew_pizza_book(){
$query=$this->db->query("SELECT * FROM crew_pizza_book ORDER BY pizza");
return $query->result();
}
function lanare(){
$query=$this->db->query("SELECT * FROM crew_lanare ORDER BY id ASC");
return $query->result();
}
function kiosk_rec(){
$query=$this->db->query("SELECT * FROM crew_kiosk_rec");
return $query->result();
}
}
?>
$data['crew_pizza_book']="a";
$data['lanare']="b";
$data['kiosk_rec']="c";
我得到了一张很好的照片:
Array ( [crew_pizza_book] => a [lanare] => b [kiosk_rec] => c )
您可以通过以下方式解决此问题:
首先创建一个名为say的助手文件init_helper.php,并在其中添加一个函数:
function init_data()
{
$CI = &get_instance();
$CI->load->model("my_model");
$data['crew_pizza_book'] = $CI->my_model->crew_pizza_book();
$data['lanare'] = $CI->my_model->lanare();
$data['kiosk_rec'] = $CI->my_model->kiosk_rec();
return $data;
}
然后在config/autoload.php
/*
| -------------------------------------------------------------------
| Auto-load Helper Files
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['helper'] = array('url', 'file');
*/
$autoload['helper'] = array('init'); //ignore the '_helper.php' portion of the filename
现在在代码中,将其称为:
$this->load->view('header');
$this->load->view('topmenu', init_data());
$this->load->view('entre');
$this->load->view('footer');
厉害。正是我要找的。然而当我应用它时,我得到了一个PHP错误:“未定义变量:init_data”除了将“my_model”更改为“mylibrary”之外,我还做了上述操作。@simonblank-一旦你自动加载init_helper.PHP,你能调用
print_r(init_data())代码>控制器或视图中的任何位置?当我尝试按照您的建议操作时,我得到了一个空白的白色屏幕。在控制器和视图中都尝试过。@Simonblank-我只是在codeigniter安装中创建了这个(我没有使用模型,因为我不知道你的模型是如何工作的),但是当我打印(init_data())时,我得到了数组([crew_pizza_book]=>a[lanare]=>b[kiosk_rec]=>c)
@simonblank-同样init_data
不能是未定义变量
,就像您在评论中提到的那样。它必须是一个函数…$CI=get_instance()代码>应该是$CI=&get_instance()代码>。另外,$this->mylibrary->crew\u pizza\u book()
应该是$CI->mylibrary->crew\u pizza\u book()
。与其他两个函数相同。请检查我的最新答案。现在我们正在做饭!工作起来很有魅力!非常感谢。不客气!很高兴它成功了:)