Как бороться с маршрутизацией при разработке собственной CMS в Codeigniter - PullRequest
0 голосов
/ 14 января 2011

Я недавно пользуюсь Codeigniter и разрабатываю простую серверную CMS для управления страницами.

На основе URL-адреса (в этом примере у меня скрыт «index.php»): mysite.com/pagename

Я бы хотел, чтобы система обнаружила, есть ли в моей базе данных значение «pagename», если оно есть, мне нужно, чтобы система перенаправила на пользовательский контроллер (например, Pagemaker), и еслинет записи с именем pagename, просто сделайте это нормально (то есть найдите контроллер с именем pagename)

В настоящее время у меня есть:

$route['(:any)'] = "pagemaker/create/$1"; 

, в результате чего все запросы перенаправляются в мою пользовательскую функцию.

Однако я хочу изменить эту структуру так, чтобы, если страница не существовала в БД, выполнялся традиционный процесс запроса codeigniter.

Может кто-нибудь предложить какой-либо совет о том, как завершитьэтот?Или какой-нибудь совет относительно маршрутизации пользовательских CMS в codeigniter вообще?

Ответы [ 2 ]

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

Лучшее решение - обновить до CI 2.0 , потому что достаточно стабильно и дает вам множество полезных функций.

В вашем случае установите следующий маршрут:

$route['404_override'] = 'pagemaker';

Если роутер не знает, куда идти, он просто отправляется на контроллер Pagemaker. Затем он может проверить, существует ли первый сегмент uri, и если нет, то вы создадите пользовательскую страницу 404 вместо дрянной страницы по умолчанию.

И я не хочу слышать что-либо из этого дерьма "О, но это еще не выпущено", я использую его CI 2.0 почти год. ; -)

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

Я могу представить две возможности:

1) Отредактируйте свою пользовательскую функцию, чтобы она перенаправляла вашего клиента, когда страница не находится в БД псевдокод:

if($dbresult == null){
    redirect("http://yoursite.com/"+$this->uri->segment(3));
}

2) Отредактируйте класс маршрутизатора CI, чтобы он сначала проверил, находится ли страница в БД, а если нет, просто продолжает. Это может быть несколько сложнее, так как вам нужно соединение с БД в вашем Router.php

...