Я планирую сделать проект в codeigniter 3.0.3, и я хочу использовать маршрутизацию, как показано ниже.
1). www.mydomain.com/categoryNamehere
2). www.mydomain.com/postNameHere
У меня есть отдельная таблица в моей базе данных, чтобы сохранить имена категорий с их уникальными идентификаторами.
Я хочу, когда пользователь нажимает ссылку, например www.mydomain.com/xxxxx
1. Первая проверка таблицы категорий (xxxxx)
2. Если никакое совпадение не отправляет его (xxxxx) на постконтроллер.
Как я могу реализовать это на Codeigniter 3.0.3?
Я попытался получить доступ к моим моделям в config / routing.php, а также попытался выполнить mysql-коды (активные записи) непосредственно на странице маршрутизации.
Чтобы реализовать предложенную структуру URL-адресов, мы должны создать один центральный диспетчер, который
Похоже на работу контроллера. Но как мы создаем контроллер, который отвечает на каждый запрос? С помощью групповой маршрутизации!
приложение / Config / routes.php
$route['.*'] = 'default_controller';
Теперь каждый запрос, независимо от URI, будет перенаправлен на Default_controller.php
.
Но как мы пишем контроллер, не зная, какой метод будет называться? Существует способ: встроенный в метод обслуживания контроллера _remap
.
Из документов :
Если ваш контроллер содержит метод с именем _remap (), он всегда будет вызываться независимо от того, что содержит ваш URI.
Поэтому я позволил себе фантазировать и создать для вас концепцию Default_controller:
приложение / контроллеры / Default_controller.php
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Default_controller extends CI_Controller { // Pseudocode ensues public function _remap() { // www.mydomain.com/(someTextHere) $slug = $this->uri->segment(1); $result = $this->load_data($slug); echo $result; } private function load_data($slug) { // Trying to find a category $category = $this->category_model->find($slug); if($category !== false) { // Presumably loads view into buffer // and returns it to the calling method return $this->load_category($category); } Trying to find post $post = $this->post_model->find($slug); if($post !== false) { return $this->load_post($post); } // Neither category nor post found show_404(); } private function load_category($category) { // http://www.codeigniter.com/user_guide/general/views.html#returning-views-as-data return $this->load->view("category", array("category" => $category), true); } }
Примечание: протестирован этот ответ на недавно загруженный Codeigniter 3.0.3