Codeigniter: отправлять все запросы, которые не соответствуют имени контроллера, к контроллеру по умолчанию

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

http://fancysite.com/controller/

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

http://fancysite.com/category

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

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

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

1 ответ

Решение

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

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

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

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

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

http://fancysite.com/category

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

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

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

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

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

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

$this->uri->segment(1);
Другие вопросы по тегам