Я разработал свой сайт на XAMPP на компьютере Win 7, и он отлично работает на localhost. Когда я загрузил его на живой сервер (linux). Он начал показывать мне эту ошибку:
Fatal error: Class 'Frontend_Controller' not found in/home/acephm3/public_html/phenomesoft.com/application/controllers/Home.php on line 3
Я проверил и применил все, что мог, от Google, но мне не повезло.
Я использую CI версии 3.0.3.
Я установил $config['subclass_prefix'] = 'MY_';
Создал My_Controller.php
следующим образом в /application/core
:
class My_Controller extends CI_Controller {
public function __construct() {
parent::__construct();
// Your own constructor code
}
public function send_mail($from, $from_name, $to, $subject, $message, $smtp, $debug) {
$this->load->library('email');
if (!$smtp) {
$this->email->from($from, $from_name);
$this->email->to($to);
$this->email->subject($subject);
$this->email->message($message);
if ( $this->email->send() ) {
$this->session->set_flashdata('message', 'We\'ve received your message. Thank you for contacting us.');
redirect('contact_us');
} else {
if ($debug) {
echo $this->email->print_debugger();
}
return false;
}
}
}
}
В комплекте:
include_once('Frontend_Controller.php');
Создан Frontend_Controller.php
в /application/core/
следующим образом:
class Frontend_Controller extends My_Controller {
public $data;
public function __construct()
{
parent::__construct();
// Your own constructor code
$this->data = array();
}
public function _load_template($tpl, $data)
{
$this->load->view('frontend/includes/header', $data);
$this->load->view('frontend/'.$tpl, $data);
$this->load->view('frontend/includes/footer', $data);
}
}
Создал контроллер Home.php
под apllication/controllers/
:
class Home extends Frontend_Controller {
public function __construct() {
parent::__construct();
// Your own constructor code
}
public function index(){
$this->_load_template('home', $this->data);
}
}
Установите $route['default_controller'] = 'home';
в route.php.
Что еще мне нужно делать? Обратите внимание, что у меня нет проблем с localhost.
Я скорее использовал другой подход, взял меня целый день, чтобы понять это.
My_Controller.php
и Frontend_Controller.php
из папки application/core
.Application.php
в application/controllers
и расширил его с CI_Controller
.Frontend.php
в application/controllers
и расширил его с контроллера Application
(не забывайте включать Application.php
в верхней части этого контроллера Frontend.php
).Home.php
включен Frontend.php
в верхнем и расширенном домашнем контроллере от контроллера Frontend
. Все это, теперь каждый раз, когда вы создаете новый контроллер frontend, его Frontend
контроллера Frontend
.
Теперь таким же образом я могу создать еще один контроллер для своих бэкэнд-контроллеров и расширить все мои внешние контроллеры.
Наслаждаться..!!
Изменить:
include_once('Frontend_Controller.php');
Для того, чтобы:
include_once( APPPATH.'core/Frontend_Controller.php' );
В домашнем контроллере
Поместите этот код в конец APPPATH. 'config.php'
Файл APPPATH. 'config.php'
:
spl_autoload_register(function ($class) {
if (substr($class,0,3) !== 'CI_') {
if (file_exists($file = APPPATH . 'core/' . $class . '.php')) {
include $file;
}
}
});
Другой способ, которым вы могли бы попробовать:
Имя файла: MY_Controller.php
<?php
class MY_Controller extends CI_Controller {
// Code Here
}
class Frontend_Controller extends MY_Controller {
// Code here
}
С классом контроллера переднего конца в том же файле, что и MY_Controller.php
Домашний контроллер
Имя файла: Home.php
<?php
class Home extends Frontend_Controller {
}