2011-01-20 3 views
0

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

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

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

так

/страница/наша история-

становится

/наша история-

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

+0

Я задал аналогичный вопрос - вы можете найти ответы полезными: http://stackoverflow.com/questions/3725050/codeigniter-best-routes-configuration-for-cms – BrynJ

ответ

1

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

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

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

0

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

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 функцию.

2

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

Допустим, что у вас есть: контроллер «страница» Метод «шоу»/

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

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

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

Всё.