Intereting Posts
Массив после функции array_unique возвращается как объект в ответе JSON Преобразование символов Unicode в эквивалентные ASCII-символы Попытка получить общую сумму на основе ввода пользователем Шаблон маршрута Api на микрофрейме SlimPhp? Выполнить код после 10-минутной задержки в PHP Количество дубликатов в sql-результатах и ​​отображение с помощью PHP Как загрузить файл, а затем перенаправить на другую страницу в php? Каковы важные различия между использованием fopen ($ url) и curl в PHP? PHP mysql_real_escape_string () -> stripslashes (), оставляющий множественные слэши Получить все элементы по имени класса с помощью DOMDocument Как сделать мета-поля WordPress конкретными для шаблона страницы? Unserialize сериализованные данные PHP в T-SQL запустить скрипт python с помощью кнопки html Получить идентификатор видео YouTube с URL w / PHP Как поддерживать «AddType x-mapp-php5 .php» на моей машине разработки

Codeigniter – Модели доступа и база данных по маршрутизации

Я планирую сделать проект в 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-адресов, мы должны создать один центральный диспетчер, который

  1. Проанализируйте запрошенный URL.
  2. Запросит базу данных, чтобы найти и отобразить категорию.
  3. Если ни одна категория не найдена, она попытается найти и отобразить текстовое сообщение.

Похоже на работу контроллера. Но как мы создаем контроллер, который отвечает на каждый запрос? С помощью групповой маршрутизации!

приложение / 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