Codeigniter урок № 5 - проблемы с работой ссылок?

0

в уроке мы написали код в файле index.php:

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

<?php endforeach ?>

согласно с результатами, показанными в видео, при переходе по ссылке отображается страница с новостью. Адрес страницы kinomonster.com:8080/news/view/news-1

у меня при переходе по ссылке открывается окно по адресу kinomonster.com:8080/views/news-1 с ошибкой 404

Где косяк???

codeigniter

12 ответов

0

Была

0

http://kinomonster.com/news/view/news-1/1
Ну просто же все. news - это название контроллера, view - это название метода в контроллере news, и далее можно вводить все что угодно, символ $1. 

0

Покажите ваш view.

<a href="view - в ссылке должен быть view, как в коде выше, у вас в ссылке views идёт. Я полагаю, что вы показываете не ваш view новостей, иначе в ссылке присутствовал бы view.

1

У меня так view выглядит с новостями из урока, открывается правильно

<h1>Все новости</h1><br>

<?php if($this->dx_auth->is_admin()) { ?>
	<p><a href="create">Добавить новость</a></p><br>
<?php   } ?>

<?php foreach ($news as $key => $value): ?>
	<p><a href="view/<?php echo $value['slug']; ?>"><?php echo $value['title']; ?></a>
	<?php if($this->dx_auth->is_admin()) { ?>
	 | <a href="edit/<?php echo $value['slug']; ?>">edit</a> | <a href="delete/<?php echo $value['slug']; ?>">delete</a></p>
	<?php   } ?>
<?php endforeach ?>
0

Тот же вопрос. При <a href="view/<?php echo $value['slug'];?>"> 

ссылка указывает на ресурс http://kinomonster.com/view/Параметр;

т.е. чтобы ссылка заработала требуется поменять href на

href="news/view/<?php echo $value['slug'];?>"

или на href="news/<?php echo $value['slug'];?>"

Вопрос 2: почему маршрут прописанный как $route['news/(:any)'] = 'news/view/$1';

работает как при http://kinomonster.com/news/view/Параметр;

так и при http://kinomonster.com/news/Параметр; ???

0

У меня проблема решилась после перезапуска компьютера, но подозреваю, что достаточно было перезагрузить только apache сервер. Но вопрос 2 остается открытым

0

понятнее не стало. Из официальной документации получается что в нашем случае мы должны из ссылки 'URL/news/view/slug' получить что в классе 'news' есть метод 'view' куда передается параметр 'slug'. Тут все на своих местах.

class News extends CI_Controller {
	
	public function view($slug = NULL) {
        }
}

Но код продолжает работать, если мы набираем 'URL/news/slug'. Означает ли это, что такое правило для маршрута автоматически проставляет класс view для любого запроса? И как объяснить, что, в таком случае, дальнейшие параметры для запроса http://kinomonster.com/news/news-1/1 приводят к ошибке 404, а http://kinomonster.com/news/view/news-1/1 отрабатывает на ура и выдает нужный результат?

0

Антон, если для Вас все просто, объясните почему 

http://kinomonster.com/news/view/news-1/1 - выводит нужную страницу

http://kinomonster.com/news/news-1/1 - выдает сообщение об ошибке

http://kinomonster.com/news/view/news-1 - выводит нужную страницу

http://kinomonster.com/news/news-1 - выводит нужную страницу

0
Вопрос 2: почему маршрут прописанный как $route['news/(:any)'] = 'news/view/$1';

Ответ можно найти в официальной документации Codeigniter:

https://codeigniter.com/user_guide/general/routing.html#examples

$route['product/(:num)'] = 'catalog/product_lookup_by_id/$1';

A URL with “product” as the first segment, and a number in the second will be remapped to the “catalog” class and the “product_lookup_by_id” method passing in the match as a variable to the method.

0

исправил - результат такой же - ошибка 404

0

и увы - на адрес отображаемой страницы я не влияю - в данном случае он пытается отобразить страницу из папки views

0

Поменял view на news, заработало.

Sign up or Log in to write an answer