【问题标题】:Load models through helper file causes blank screen通过帮助文件加载模型导致黑屏
【发布时间】:2014-07-26 09:40:23
【问题描述】:

我正在做一个基于 Codeigniter 框架的系统,并使用大量来自数据库的数据。

困扰我的是,在每个函数中,我都需要声明你在下面的方框内看到的内容。每次我创建一个包含可见内容的新函数时,我都需要重新填写。有没有办法把它变成一个简单的方法?例如,您在普通 php 中可以:

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');
}


根据我目前收到的帮助,这里对问题进行了更新:


我添加了一个帮助文件(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;
}

?>

在 config/autoload.php 我添加了新的帮助文件。

$autoload['helper'] = array('url', 'init');

在我的模型“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();
    }
}
?>

我尝试用一​​个简单的函数对此进行测试:

public function test()
{
    print_r(init_data());
}

这会生成一个空白屏幕。

当我尝试像这样为数组设置静态值时:

$data['crew_pizza_book']="a"; 
$data['lanare']="b";                   
$data['kiosk_rec']="c"; 

我得到了很好的打印:

Array ( [crew_pizza_book] => a [lanare] => b [kiosk_rec] => c ) 

【问题讨论】:

  • $CI=get_instance(); 应该是 $CI=&amp;get_instance();$this-&gt;mylibrary-&gt;crew_pizza_book() 也应该是 $CI-&gt;mylibrary-&gt;crew_pizza_book() 。与其他两个功能相同。请检查我的更新答案。
  • 现在我们正在做饭!奇迹般有效!谢谢!
  • 不客气!很高兴它起作用了:)

标签: php database codeigniter model controller


【解决方案1】:

你可以这样解决:

首先创建一个名为 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;
}

然后autoload 这个helperconfig/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”,这是我在这里使用的模型。
  • @SimonBlanck - 自动加载 init_helper.php 后,您可以在控制器或视图中的任何位置调用 print_r(init_data()); 吗?
  • 当我尝试按照您的建议进行操作时,我得到了一个空白的白色屏幕。在控制器和视图中都试过了。
  • @SimonBlanck - 我刚刚在我的 codeigniter 安装中创建了这个,(我没有使用模型,因为我不知道你的模型是如何工作的),但是当我做 print_r(init_data()) - 我获取Array ( [crew_pizza_book] =&gt; a [lanare] =&gt; b[kiosk_rec] =&gt; c)
  • @SimonBlanck - 同样init_data 不能是undefined variable,就像你在评论中提到的那样。它必须是一个函数......
猜你喜欢
  • 2013-06-05
  • 1970-01-01
  • 2011-01-22
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
相关资源
最近更新 更多