Я пытаюсь создать экземпляр класса, но я получаю следующую ошибку:
Возникла ошибка 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();
}
}
}
Что я делаю не так?
Вы пытаетесь загрузить контроллер внутри другого контроллера. Вы не должны этого делать. Как я вижу, вы хотите вызвать свою собственную функцию вместо прямой загрузки представления. У вас есть несколько решений для этого, здесь один:
Создать библиотеку
В папке приложений/библиотек создайте 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