Codeigniter: отправлять все запросы, которые не соответствуют имени контроллера, к контроллеру по умолчанию - PullRequest
3 голосов
/ 22 декабря 2010

Я работаю над проектом, включающим два вида URL, один по стандартному шаблону CI

http://fancysite.com/controller/

И еще один представляющий следующую схему:

http://fancysite.com/category

Я бы хотел, чтобы второй вызывал функцию handlecategory (или что-то подобное) контроллера по умолчанию с аргументом category.

Бонус за любовь, если бы вы также могли сказать мне, как разрешить URL-адресам, таким как http://place.fancysite.com/, вызывать ту же функцию, передавая только place в качестве аргумента, если ни одна категория не следует за этим URL, или оба place и category если это так.

Дополнительные данные: я уже знаю имена всех контроллеров, мест, категорий.

1 Ответ

6 голосов
/ 22 декабря 2010

Вы можете использовать кодировщик URI-маршрутизацию для достижения этой цели -

Вставьте это в конец вашего файла маршрута -

$route[':any'] = 'path of the default controller';

Все остальные маршруты должны располагаться над верхним кодом.

Допустим, встреченный кодовый указатель URL -

http://fancysite.com/category

Итак, сначала codeigniter будет искать, существует ли контроллер с именем category. если он этого не получит, то он проверит файл маршрута, чтобы проверить, что там любой маршрут, указанный так -

$route['category/:any'] = 'actual path';

Если в этом случае не указан такой маршрут, codeigniter пропустит этот запросить путь к контроллеру по умолчанию, который вы упомянули в последней строке маршрутов.

Даже если ссылка содержит поддомен, запрос не будет переходить на тот же контроллер по умолчанию.

Теперь вы можете вставить логику для обработки поддоменов или чего-либо еще в контроллере по умолчанию.

Вы даже можете получить параметр 'category' в нашем примере URL, взятом , который в URL, используя codeigniters URI вспомогательный класс, как показано ниже -

$this->uri->segment(1);
...