我无法在Codeigniter上创建类的实例

时间:2015-02-01 15:07:34

标签: php codeigniter class instance

我正在尝试创建一个类的实例,但是我收到以下错误:

  

遇到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();
        }   
    }
}

我做错了什么?

1 个答案:

答案 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}}