Я не могу создать экземпляр класса на Codeigniter

0

Я пытаюсь создать экземпляр класса, но я получаю следующую ошибку:

Возникла ошибка PHP

Уровень важности: уведомление

Сообщение: Неопределенное свойство: DM_TemplateLoader :: $ load

Имя файла: libraries/Form_validation.php

Номер строки: 147

Backtrace:

Файл: C:\xampp\htdocs\DataMigrator\ci_my_app\controllers\DM_FormValidator.php Линия: 13 Функция: __construct

Файл: C:\xampp\htdocs\DataMigrator\index.php Линия: 292 Функция: require_once

Неустранимая ошибка: вызов функции-функции-члена для не-объекта в C:\xampp\htdocs\DataMigrator\ci_my_sys\libraries\Form_validation.php в строке 147 Ошибка PHP возникла

Уровень важности: ошибка

Сообщение: вызов функции-функции-члена() для объекта без объекта

Имя файла: libraries/Form_validation.php

Номер строки: 147

Backtrace:

Это мой код:

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

Что я делаю не так?

Теги:
class
codeigniter
instance

1 ответ

0
Лучший ответ

Вы пытаетесь загрузить контроллер внутри другого контроллера. Вы не должны этого делать. Как я вижу, вы хотите вызвать свою собственную функцию вместо прямой загрузки представления. У вас есть несколько решений для этого, здесь один:

Создать библиотеку

В папке приложений/библиотек создайте 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();
        }   
    }

}

Загрузите свою библиотеку

После этого в вашем приложении /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

  • 0
    Я попробовал ваш код и получаю эту ошибку: Неустранимая ошибка: вызов вспомогательной функции-члена () для необъекта в C: \ xampp \ htdocs \ DataMigrator \ ci_my_app \ library \ Layout.php в строке 15
  • 0
    Ну, то, что не работает, это то, что я взял из вашего первого поста. Я предполагал, что у вас уже есть помощник по URL. Если нет, просто удалите строку. Но эта часть зависит от вас. ;)
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню