Как исправить ошибку a php error was encountered в codeigniter?

1

Прохожу курс 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

codeIgniter

17 ответов

1

Так пробуйте:

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

новость 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';
1

По какой ссылке от сюда переходит?

<p><a href="view/<?php echo $value['slug']; ?>"><?php echo $value['title']; ?></a></p>
1

По идеи можно дописать сюда недостающий путь, типа такого:

<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>

Там исходник есть может забыли что-то написать в настройках

1

Контроллер News.php, модель и view покажите, попробую помочь.

1

Модель у вас называется News_model.php, а вызываете ее так:

	public function _construct() {
		parent::_construct();
		$this->load->model('news_model');
	}

Полагаю, что нужно вызвать ее так:

	public function __construct() {
		parent::__construct();
		$this->load->model('News_model');
	}
1

файлы скинуть эти или код из них, да?

1

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

?>
1

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');
	}
}
?>
1

а до View я еще не дошел, там пока просто написано view news

1

Попробовал, ничего не изменилось, и в уроке именно так было, я еще раз проверил...по прежнему ошибка...

я думал что это из - за этого....но не знаю что это))

Backtrace:

File: E:\xampp\htdocs\kinomonster\index.php
Line: 315
Function: require_once
1

заработало! Спасибо, но пришлось сменить класс с MY на CI а то писал что нет такого класса...

в уроке ни было нигде прописано $this->data и тп  но с этим все заработало....

1

ну вы так и написали собственно про контроллер))

1

Начал дальше идти по урокам, и в 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 ?>
1

в routes.php записи есть

http://kinomonster.com/news/view/news-1  - по такой ссылке новость открывается

http://kinomonster.com/news   -   по такой ссылке открывает все новости

при клике на ссылку новости, на страничке news выдает ошибку, а должна перекинуть на news/view/news-1  как я понимаю....

1

я не совсем понял вопрос, мне кажется что вот по этой... http://kinomonster.com/view/news-1  а должно быть news еще, как я понимаю

1

в настройках xamppa была заморочка, у меня файл намного отличается от того что загрузил из урока....я вроде разобрался что раскоментировать, но может в этом проблема?

Sign up or Log in to write an answer