簡體   English   中英

我無法在Codeigniter上創建類的實例

[英]I can't create an instance of a class on Codeigniter

我正在嘗試創建一個類的實例,但出現以下錯誤:

遇到PHP錯誤

嚴重程度:注意

消息:未定義的屬性:DM_TemplateLoader :: $ load

文件名:libraries / Form_validation.php

行號:147

回溯:

文件:C:\\ xampp \\ htdocs \\ DataMigrator \\ ci_my_app \\ controllers \\ DM_FormValidator.php行:13函數:__construct

文件:C:\\ xampp \\ htdocs \\ DataMigrator \\ index.php行:292功能:require_once

致命錯誤:在第147行上的C:\\ xampp \\ htdocs \\ DataMigrator \\ ci_my_sys \\ libraries \\ Form_validation.php中的非對象上調用成員函數helper()遇到了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();
        }   
    }
}

我究竟做錯了什么?

您正在嘗試將控制器加載到另一個控制器中。 你不應該那樣做。 如我所見,您想調用自己的函數,而不是直接加載視圖。 您可以使用多種解決方案,這是一種:

創建一個圖書館

在您的application / libraries文件夾中,創建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);

您也可以使用基本的load-> view()(system / core / Loader.php)。 看一下文檔: http : //www.codeigniter.com/user_guide/general/core_classes.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM