Codeigniter Routing - PullRequest
       19

Codeigniter Routing

0 голосов
/ 20 января 2011

В настоящее время я работаю над CMS для клиента и собираюсь использовать Codeigniter для построения поверх него, это всего лишь быстрый проект, поэтому я не ищу надежного решения.

Длясоздать страницы, я получаю, чтобы сохранить детали страницы и вытащить правильную страницу, основываясь на слаге, соответствующем слагу в таблице mysql.

Мой вопрос, однако, чтобы это работало, я должен пройтиэтот слаг от URL контроллера до модели, это означает, что у меня тоже есть контроллер в URL, который мне не нужен, возможно ли удалить контроллер из URL с маршрутами?

так

/ page / our-story

становится

/ our-story

Возможно ли это

Ответы [ 3 ]

2 голосов
/ 23 января 2011

Я бы порекомендовал сделать это следующим образом.

Допустим, у вас есть: контроллер "страница" / метод "show"

$route['page/show/:any'] = "$1";

или метод является индексом, который я не используюНе рекомендуется, и если у вас есть что-то вроде новостей, добавьте следующее.

$route['news/show/:any'] = "news/$1";

Вот и все.

1 голос
/ 24 января 2011

Да, конечно. Я только недавно построил CMS, управляемую Codeigniter. Вся цель маршрутов - изменить внешний вид и функционирование ваших URL. Он помогает вам отделиться от парадигмы «контроллер / функция / аргумент / аргумент» и позволяет выбрать, как должен выглядеть ваш URL.

  1. Создайте контроллер страниц в вашем каталоге контроллеров
  2. Поместите в него функцию _remap, чтобы перехватывать все запросы к контроллеру
  3. Если вы используете последнюю версию CI 2.0 из Bitbucket, то в вашем файле rout.php вы можете поместить это в конец файла: $routes['404_override'] = "pages";, и тогда все вызовы несуществующим контроллерам будут отправлено на ваш контроллер, и вы можете проверить наличие фрагментов URL. Вы также должны сделать страницы своим значением контроллера по умолчанию.

См. Мой ответ для подобного вопроса здесь из нескольких месяцев назад, например, код и рабочий код, который я использую в моей Codeigniter CMS.

0 голосов
/ 20 января 2011

Вот код, который я использовал в недавнем проекте для достижения этой цели.Я одолжил это откуда-то;не могу вспомнить, где.

function _remap($method)
{
  $param_offset = 2;

  // Default to index
  if ( ! method_exists($this, $method))
  {
    // We need one more param
    $param_offset = 1;
    $method = 'index';
  }

  // Since all we get is $method, load up everything else in the URI
  $params = array_slice($this->uri->rsegment_array(), $param_offset);

  // Call the determined method with all params
  call_user_func_array(array($this, $method), $params);
}

Тогда моя функция index - это то место, куда вы поместите свою функцию page.

...