我正在尝试创建一个类的实例,但是我收到以下错误:
遇到PHP错误
严重性:注意
消息:未定义属性:DM_TemplateLoader :: $ load
文件名:libraries / Form_validation.php
行号:147
回溯:
文件: C:\ XAMPP \ htdocs中\ DataMigrator的\ ci_my_app \控制器\ DM_FormValidator.php 行:13功能:__construct
文件:C:\ xampp \ htdocs \ DataMigrator \ index.php行:292功能: require_once
致命错误:在非对象中调用成员函数helper() C:\ XAMPP \ htdocs中\ DataMigrator的\ ci_my_sys \库\ Form_validation.php 第147行遇到PHP错误
严重性:错误
消息:在非对象
上调用成员函数helper()文件名:libraries / Form_validation.php
行号:147
回溯:
这是我的代码:
DM_FormValidator.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class DM_FormValidator extends CI_Controller {
public function index()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('sender_host', 'Host (Sender)', 'required');
if ($this->form_validation->run() == FALSE) {
require_once APPPATH . 'controllers/DM_TemplateLoader.php';
$template_loader = new DM_TemplateLoader();
}
}
}
DM_TemplateLoader.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class DM_TemplateLoader extends CI_Controller {
public function view($page = 'home') {
// Loading the URL helper
$this->load->helper('url');
if (file_exists(APPPATH . 'views/pages/' . $page . '.php')) {
$data['page_title'] = 'Data Migrator: Home';
// Building the template
$this->load->view('template/header', $data);
$this->load->view('pages/' . $page);
$this->load->view('template/footer');
}
else {
show_404();
}
}
}
我做错了什么?
答案 0 :(得分:1)
您正在尝试在另一个控制器中加载Controller。你不应该这样做。我可以看到,您想要调用自己的函数而不是直接加载视图。你有多种解决方案可以做到这一点,这里有一个:
创建图书馆
在你的应用程序/库文件夹中创建Layout.php(或任何你想要的)
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Layout
{
protected $ci;
public function __construct()
{
$this->ci =& get_instance();
}
public function load_template($view)
{
// Loading the URL helper
$this->ci->load->helper('url');
if (file_exists(APPPATH . 'views/pages/' . $page . '.php'))
{
$data['page_title'] = 'Data Migrator: Home';
// Building the template
$this->ci->load->view('template/header', $data);
$this->ci->load->view('pages/' . $page);
$this->ci->load->view('template/footer');
}
else {
show_404();
}
}
}
加载您的图书馆
之后,在你的application / config / autoload.php
中$autoload['libraries'] = array('layout', yourotherstuff);
使用
最后,在您的控制器DM_FormValidator中,而不是实例化您的类,只需调用库:
$view = "mypage";
$this->layout->load_template($data);
您也可以使用自己覆盖base load-&gt; view()(system / core / Loader.php)。请查看文档:{{3}}