Как исправить ошибку a php error was encountered в codeigniter?
Прохожу курс CODEIGNITER, застрял на третьем уроке. До этого все работало отлично включая предыдущий урок. Выдает две ошибки в браузере, уже несколько раз все перепроверил и все равно ошибка...
A PHP Error was encountered
Severity: Notice
Message: Undefined property: News::$news_model
Filename: controllers/News.php
Line Number: 14
Backtrace:
File: E:\xampp\htdocs\kinomonster\application\controllers\News.php
Line: 14
Function: _error_handler
File: E:\xampp\htdocs\kinomonster\index.php
Line: 315
Function: require_once
An uncaught Exception was encountered
Type: Error
Message: Call to a member function getNews() on null
Filename: E:\xampp\htdocs\kinomonster\application\controllers\News.php
Line Number: 14
Backtrace:
File: E:\xampp\htdocs\kinomonster\index.php
Line: 315
Function: require_once
17 ответов
Так пробуйте:
News_model.php
<?php
class News_model extends CI_Model {
public function __construct() {
$this->load->database();
}
public function getNews($slug = FALSE) {
if ($slug === FALSE) {
$query = $this->db->get('news');
return $query->result_array();
}
$query = $this->db->get_where('news', array('slug' => $slug));
return $query->row_array();
}
}
Контроллер News.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class News extends MY_Controller {
public function __construct() {
parent::__construct();
$this->load->model('News_model');
}
public function index() {
$this->data['title'] = 'Все новости';
$this->data['news'] = $this->News_model->getNews();
$this->load->view('templates/header', $this->data);
$this->load->view('news/index', $this->data);
$this->load->view('templates/footer');
}
public function view($slug = NULL) {
$this->data['news_item'] = $this->News_model->getNews($slug);
if (empty($this->data['news_item'])) {
show_404();
}
$this->data['title'] = $this->data['news_item']['title'];
$this->data['content'] = $this->data['news_item']['text'];
$this->data['slug'] = $this->data['news_item']['slug'];
$this->load->view('templates/header', $this->data);
$this->load->view('news/view', $this->data);
$this->load->view('templates/footer');
}
}
Только я в контроллере наследуюсь от MY_Controller (возможно вы еще до этого не дошли) и нужно заменить на стандартный контроллер CI_Controller
новость 1 и новость 2, при нажатии на которые вылезает ошибка 404
<p><a href="view/<?php echo $value['slug']; ?>"><?php echo $value['title']; ?></a>
Попробуйте не через ссылки открывать новости, которые появились в index.php, а просто в браузере ссылки набрать в соответствии с route.
И в routes.php есть записи?
$route['news'] = 'news';
$route['news/(:any)'] = 'news/view/$1';
По какой ссылке от сюда переходит?
<p><a href="view/<?php echo $value['slug']; ?>"><?php echo $value['title']; ?></a></p>
По идеи можно дописать сюда недостающий путь, типа такого:
<p><a href="/news/view/<?php echo $value['slug']; ?>"><?php echo $value['title']; ?></a></p>
но у меня так работает:
<p><a href="view/<?php echo $value['slug']; ?>"><?php echo $value['title']; ?></a></p>
Там исходник есть может забыли что-то написать в настройках
Контроллер News.php, модель и view покажите, попробую помочь.
Модель у вас называется News_model.php, а вызываете ее так:
public function _construct() {
parent::_construct();
$this->load->model('news_model');
}
Полагаю, что нужно вызвать ее так:
public function __construct() {
parent::__construct();
$this->load->model('News_model');
}
файлы скинуть эти или код из них, да?
News_model.php
<?php
class News_model extends CI_Model {
public function __construct() {
$this->load->database();
}
public function getNews($slug = FALSE) {
if($slug === FALSE) {
$query = $this->db->get('news');
return $query->result_array();
}
$query = $this->db->get_where('news', array('slug' => $slug));
return $query->row_array();
}
}
?>
News.php
<?php
defined('BASEPATH') or exist('No direc script access allowed');
class News extends CI_Controller {
public function _construct() {
parent::_construct();
$this->load->model('news_model');
}
public function index() {
$data['title'] = "Все новости";
$data['news'] = $this->news_model->getNews();
$this->load->view('templates/header', $data);
$this->load->view('news/index', $data);
$this->load->view('templates/footer');
}
public function view($slug = NULL) {
$data['news_item'] = $this->news_model->getNews($slug);
if(empty($data['news_item'])) {
show_404();
}
$data['title'] = $data['news_item']['title'];
$data['content'] = $data['news_item']['text'];
$this->load->view('templates/header', $data);
$this->load->view('news/view', $data);
$this->load->view('templates/footer');
}
}
?>
а до View я еще не дошел, там пока просто написано view news
Попробовал, ничего не изменилось, и в уроке именно так было, я еще раз проверил...по прежнему ошибка...
я думал что это из - за этого....но не знаю что это))
Backtrace:
File: E:\xampp\htdocs\kinomonster\index.php
Line: 315
Function: require_once
заработало! Спасибо, но пришлось сменить класс с MY на CI а то писал что нет такого класса...
в уроке ни было нигде прописано $this->data и тп но с этим все заработало....
ну вы так и написали собственно про контроллер))
Начал дальше идти по урокам, и в 5 уроке снова ошибка, я просто уже совсем не понимаю, что происходит.....
по адресу kinomonster.com/news как и в уроке, появляется заголовок "Все новости" и две ссылки на новость 1 и новость 2, при нажатии на которые вылезает ошибка 404
Совсем я уже запутался.....видать пока рано дальше идти....или пересмотреть....еще раз тему с начала.. с первого урока код игнитор...
News_model.php
<?php
class News_model extends CI_Model {
public function __construct() {
$this->load->database();
}
public function getNews($slug = FALSE) {
if($slug === FALSE) {
$query = $this->db->get('news');
return $query->result_array();
}
$query = $this->db->get_where('news', array('slug' => $slug));
return $query->row_array();
}
}
?>
News.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class News extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('News_model');
}
public function index() {
$this->data['title'] = 'Все новости';
$this->data['news'] = $this->News_model->getNews();
$this->load->view('templates/header', $this->data);
$this->load->view('news/index', $this->data);
$this->load->view('templates/footer');
}
public function view($slug = NULL) {
$this->data['news_item'] = $this->News_model->getNews($slug);
if (empty($this->data['news_item'])) {
show_404();
}
$this->data['title'] = $this->data['news_item']['title'];
$this->data['content'] = $this->data['news_item']['text'];
$this->data['slug'] = $this->data['news_item']['slug'];
$this->load->view('templates/header', $this->data);
$this->load->view('news/view', $this->data);
$this->load->view('templates/footer');
}
}
index.php
<h1>Все новости</h1>
<?php foreach ($news as $key => $value): ?>
<p><a href="view/<?php echo $value['slug']; ?>"><?php echo $value['title']; ?></a></p>
<?php endforeach ?>
в routes.php записи есть
http://kinomonster.com/news/view/news-1 - по такой ссылке новость открывается
http://kinomonster.com/news - по такой ссылке открывает все новости
при клике на ссылку новости, на страничке news выдает ошибку, а должна перекинуть на news/view/news-1 как я понимаю....
я не совсем понял вопрос, мне кажется что вот по этой... http://kinomonster.com/view/news-1 а должно быть news еще, как я понимаю
в настройках xamppa была заморочка, у меня файл намного отличается от того что загрузил из урока....я вроде разобрался что раскоментировать, но может в этом проблема?