Как я могу обработать динамические URI, где все сегменты являются произвольными? - PullRequest
0 голосов
/ 21 июля 2009

Как можно выдвинуть URI, как это в CodeIgniter (в настоящее время 1.7.1):

example.com/seg1/seg2/seg3/seg4/

или

example.com/seg1/seg2/

и т.д.. через единственный метод класса в контроллере, чье имя не появляется в URI? В обычном сценарии PHP я бы использовал mod_rewrite примерно так:

RewriteRule ^([^/]+)/$ myfile.php?one=$1 [L]  
RewriteRule ^([^/]+)/([^/]+)/$ myfile.php?one=$1&two=$2 [L]  
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ myfile.php?one=$1&two=$2&three=$3 [L]  
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ myfile.php?one=$1&two=$2&three=$3&four=$4 [L]

(Я тщательно очищаю и проверяю сегменты в PHP, возвращая 404, если недействительный)

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

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

Разъяснение: я прочитал документацию по библиотеке URI, маршрутизации и т. Д. Перед началом моего проекта, и они были полезны для разных вещей, но эта конкретная проблема не решена ни одним из них. Я не вижу, как все сегменты URI могут быть по существу направлены через контроллер, который не назван в URI, и где все сегменты являются произвольными. Примеры маршрутизации предполагают, что вы знаете значение первого сегмента. Я уже знаю, как удалить «index.php», а также сегменты доступа.

1 Ответ

1 голос
/ 21 июля 2009

Вы искали маршрутизацию URI в руководстве пользователя и в вики? Они должны рассказать вам почти все о маршрутизации, переписывании и доступе к различным сегментам URI.

http://codeigniter.com/user_guide/general/routing.html

http://codeigniter.com/user_guide/libraries/uri.html

http://codeigniter.com/wiki/mod_rewrite/

[Edit:]

Вот длинное описание: Нет способа не «жестко закодировать» первый сегмент, и вы все равно можете «жестко закодировать» второй сегмент.

То, чего вы хотите достичь, можно почти сделать, отредактировав маршруты в system / application / config / rout.php:

$route['(:any)'] = 'your_default_controller/index/$1';

$route['default_controller'] = "your_default_controller";

Итак, первый сегмент вашего URI будет методом контроллера. Вы можете получить доступ ко всем сегментам вашего (начального) URI с помощью

$this->uri->segment(n)

Затем вы будете использовать индекс метода для вызова нужной функции для каждого запроса.

С другой стороны: почему вы хотите использовать для этого инфраструктуру MVC, поскольку вы не используете большую часть преимуществ MVC?

...