Почему изменилась ссылка новостей?

0

После выполнения урока 8 codeigniter (добавление формы редактирования новости) перестали работать ссылки на просмотр содержания новостей, т.е. с адреса http://kinomonster.com/news, при нажатии на Новость 1 - идет перенаправление на страницу http://kinomonster.com/view/news-1 (ошибка), потому что должна открываться страница http://kinomonster.com/news/view/news-1

Ссылки просмотра новостей работают нормально до момента выполнения задания по созданию формы редактирования новости. ЭТО ЖЕСТЬ. Целую неделю, прихожу после работы и начинаю заново в первого урока - все работает. И тут на 8 уроке слетает, хотя правок в модель/вид/контролер никаких не вношу - что отвечают за "блок" просмотра новостей. 

Сегодня, AOMEI Backupper  создал резервную копию каталога kimonoster на этапе, когда ссылки еще работали. Слетели. Удалил все содержание kinomonster и восстановил. Ссылки все равно не работают!

Подскажите, пожалуйста, где ошибка?

роутер

$route['news'] = 'news';
$route['news/create'] = 'news/create';
$route['news/edit'] = 'news/edit';
$route['news/(:any)'] = 'news/view/$1';

котроллер

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

модель

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

	public function setNews ($slug, $title, $text) {
		$data = array (
			'title' => $title,
			'slug' => $slug,
			'text' => $text
		);

		return $this->db->insert('news', $data);
	}

		public function updateNews ($slug, $title, $text) {
		$data = array (
			'title' => $title,
			'slug' => $slug,
			'text' => $text
		);

		return $this->db->update('news', $data, array('slug'=>$slug));
	}

}	

вид

<h3><?php echo $title; ?></h3>
<p><?php echo $content; ?></p>

СПАСИБО!

codeigniter

5 ответов

0

Посмотрел код страницы с ошибкой (ctrl-U) и вспомнил, как удалось поправить ситуацию пару дней назад

внес изменение в цикл, ХОТЯ В УРОКЕ по-другому код записан. 

Вообщем, ссылки начинают работать при таком виде цикла

<?php foreach ($news as $key => $value): ?>
	<p><a href = "news/view/<?php echo $value['slug']; ?>"><?php echo $value['title']; ?></a></p>
<?php endforeach ?>

далее, пришлось и edit видоизменять 

<?php foreach ($news as $key => $value): ?>
	<p><a href = "news/view/<?php echo $value['slug']; ?>"><?php echo $value['title']; ?> | <a href = "news/edit/<?php echo $value['slug']; ?>">edit</a></p>
<?php endforeach ?>

в самом уроке ссылка имеет следующий вид и она работает сначала в моем коде

<?php foreach ($news as $key => $value): ?>
<p><a href = "view/<?php echo $value['slug']; ?>"><?php echo $value['title']; ?></a></p>
<?php endforeach ?>

ВАЖНО понять причину такого поведения! 

Кто-то понимает суть причины?

Спасибо!

0

Код не трогал. Повносил изменения  через edit в содержания новостей (добавил изменения в БД, вывел - посмотрел, через браузер....). Начал просматривать список новостей - и вновь изменились адреса ссылок - в адресах добавилось .../news/.,.. тоже ошибка вместо вывода страниц. 

Изменил вновь тело цикла

<h1>Все новости</h1>
<?php foreach ($news as $key => $value): ?>
	<p><a href = "view/<?php echo $value['slug']; ?>"><?php echo $value['title']; ?> | <a href = "edit/<?php echo $value['slug']; ?>">edit</a></p>
<?php endforeach ?>

и все нормально работает. 

Мистика. Но в реальной проекте такая нестабильность работы - может обойтись очень дорого! 

По какой причине так нестабильно работает код в отрезке времени отсутствия каких либо изменений в самом коде?

0

Спасибо, student_difqYdQc, сравню с кодом, что к 9 уроку прикреплен. Поскольку конечный файл (в конце курса) - другой, и об этом не упоминается во время презентации самого 8 урока, возможно далее по курсу будет идти речь!  Так, в начало некоторых запросов добавлена запись $this. 

0

при каждом добавлении или удалении с БД через форму новости, происходит изменение ссылки. Например, все работает, добавляю или удаляю новость, новость добавилась/удалилась. После чего появляется ошибка при просмотре/редактировании/удалении новости. Дописываю news/ в ссылки (index.php<-news<-view) - опять начинает все работать. Снова, добавляю или удаляю новость. Происходят изменения в БД. и та же ошибка со ссылками. Теперь нужно удалить news/со ссылок.... 

Взял исходный код автора для тестирования проблем, вышеописанных.

Поведение аналогичное со ссылками. 

Но я заметил некую закономерность и думаю причина в этом!

Создал CRUD приложение для постов и подключил вывод постов на главную страницу. 

Так, например, после нажатия кнопки читать открывается страница просмотра поста по адресу http://kinomonster.com/posts/view/posts-1

Соответственно ссылка на CRUD приложение

http://kinomonster.com/posts

и если я перехожу по ней, то действительно открывается список постов. НО РАБОТА С НИМИ СТАЕТ НЕВОЗМОЖНОЙ (при нажатии просмотр, редактирования - изменяются адреса ссылок). Изначально я действовал, как описывал ранее (периодически, от сбоя к сбою, корректировал адреса). Но все оказалось гораздо проще!

Для корректной работы CRUD приложения (новости, посты) в конце ссылки необходимо ставить / (слеш). То есть, 

http://kinomonster.com/posts/

Итак, загрузил страницу http://kinomonster.com/posts - вывелись посты, но далее работать с ними невозможно. В адресной строке добавляю в конец / и перезагружаю страницу и все ГУД.

Возможно, некоторые люди воспринимают данную деталь как само-собой разумеющуюся аксиому, но мне как "новичку" пришлось целую неделю переписывать заново блок с новостями в поисках ошибки в коде, какую я так и не нашел! НО, за ту неделю я приспособился дописывать news/ потом убирать его, чтобы продолжать курс. 

Возможно, так себя ведет PHP 7.4.2 (что уже обсуждалось при ошибке NULL, которая у автора отсутствует. Ее удалось мне обойти проверкой isset. XAMPP я не переустанавливал на версию РНР 7.2 (кажется ее рекомендовали)). 

Если же дело не в XAMPP и версии PHP, тогда, полагаю, можно дописать файл .htaccess, чтобы по умолчанию дописывался / в конце адреса, в случае его отсутствия! Хотя CDUD приложение работает и в этом случае      http://kinomonster.com/posts//edit/posts-1   (два слеша)

Надеюсь, эти наблюдения станут полезны еще для кого-то!

Также, было бы интересно услышать дополнение по данному поводу!

0

Проще я думаю исходный код развернуть из последнего урока и сравнить со своим кодом. Таких ошибок не наблюдаю.

Sign up or Log in to write an answer