2015-02-01 2 views
0

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

A PHP Error was encountered

Severity: Notice

Message: Undefined property: DM_TemplateLoader::$load

Filename: libraries/Form_validation.php

Line Number: 147

Backtrace:

File: C:\xampp\htdocs\DataMigrator\ci_my_app\controllers\DM_FormValidator.php Line: 13 Function: __construct

File: C:\xampp\htdocs\DataMigrator\index.php Line: 292 Function: require_once

Fatal error: Call to a member function helper() on a non-object in C:\xampp\htdocs\DataMigrator\ci_my_sys\libraries\Form_validation.php on line 147 A PHP Error was encountered

Severity: Error

Message: Call to a member function helper() on a non-object

Filename: libraries/Form_validation.php

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

Что я делаю неправильно?

ответ

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-> вид() (система /core/Loader.php) с вашим. Посмотрите на документацию: http://www.codeigniter.com/user_guide/general/core_classes.html

+0

Я попробовал ваш код, и я получаю эту ошибку: Фатальная ошибка: Вызов функции члена помощника() на не-объект в C: \ XAMPP \ HTDOCS \ DataMigrator \ ci_my_app \ libraries \ Layout.php в строке 15 –

+0

Ну, часть, которая не работает, та самая, что я взял с вашего первого сообщения. Я предположил, что у вас есть вспомогательный помощник. Если нет, просто удалите строку. Но эта часть зависит от вас. ;) – AdrienXL

+0

О, я вижу. Я понял, что не могу использовать $ this-> load-> view ('template/header', $ data); но он работает, когда я использую его так: $ this-> ci-> load-> view ('template/header', $ data); Я не понял, что такое $ this-> ci = & get_instance(); должно означать, но в любом случае спасибо! Теперь все работает отлично. –

Смежные вопросы