Codeigniter урок № 5 - проблемы с работой ссылок?
в уроке мы написали код в файле 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
Где косяк???
12 ответов
Была
http://kinomonster.com/news/view/news-1/1
Ну просто же все. news - это название контроллера, view - это название метода в контроллере news, и далее можно вводить все что угодно, символ $1.
Покажите ваш view.
<a href="view - в ссылке должен быть view, как в коде выше, у вас в ссылке views идёт. Я полагаю, что вы показываете не ваш view новостей, иначе в ссылке присутствовал бы view.
У меня так 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 ?>
Тот же вопрос. При <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/Параметр; ???
У меня проблема решилась после перезапуска компьютера, но подозреваю, что достаточно было перезагрузить только apache сервер. Но вопрос 2 остается открытым
понятнее не стало. Из официальной документации получается что в нашем случае мы должны из ссылки '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 отрабатывает на ура и выдает нужный результат?
Антон, если для Вас все просто, объясните почему
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 - выводит нужную страницу
Вопрос 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.
исправил - результат такой же - ошибка 404
и увы - на адрес отображаемой страницы я не влияю - в данном случае он пытается отобразить страницу из папки views
Поменял view на news, заработало.