Функция маршрутизации PHP Regex соответствует URL - PullRequest
0 голосов
/ 21 апреля 2011

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

======

РЕДАКТИРОВАНИЕ:

Итак, я немного переписал код, новый код можно найти здесь: http://pastebin.com/Ver601FF

Результат можно увидеть здесь: http://img824.imageshack.us/i/phpprob.png/

Теперь я не могу найти способ сопоставления значений URL-адресов в соответствии с регулярным выражением в массиве с индексами, аналогичными второму параметру маршрута.

======================== РЕДАКТИРОВАТЬ СТОП ================== В конце я хотел бы иметь массив:

$request['controller']
$request['action']

в качестве основных параметров $ request, так как они мне нужны постоянно, поэтому это должен быть мой стандартный маршрут / маршрут по умолчанию.

Итак, допустим, $ pattern [2]происходит, когда я заканчиваю с этим ужасным регулярным выражением, я хотел бы иметь это:

$request['controller']
$request['action'] = show
$request['id']
$request['name']

очевидно, что все должно быть заполнено соответствующим образом в зависимости от запрошенного URL ...

Не знаюэто потому чтоУже поздно или нет, но я не могу понять, как мне сопоставить эти вещи.

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

Еще одна проблема, решение которой я не знаю, это тот факт, что URL, такой как

"/ information / show / some/ Другое / Вещи "

должен вернуть мне что-то вроде

$request['controller']  = information
$request['action'] = show
$request['params'] = array(some, other, stuff)

Я ценю любую помощь и надеюсь, что кто-то может мне помочь из этой проблемы: (

Большое спасибо заранее.

Ответы [ 2 ]

1 голос
/ 21 апреля 2011
$regex  .= "[a-zA-Z]\/";

должно быть

$regex  .= "[a-zA-Z]+\/";

Первая соответствует одной букве. Второй соответствует одному или нескольким.

Кроме того, ваши косые черты находятся не в том месте ([]/[]/ против /[]/[]), и ваш матч не закреплен.

...
$regex .= "\/[a-zA-Z]+";
...
$regex .= "\/" . $route;
...
print_r(preg_grep("/^" . $patt . "\z/i", $url));
...
0 голосов
/ 21 апреля 2011

Я сам нашел ответ на свой вопрос - надеюсь, он кому-нибудь поможет. Но я мог бы даже опубликовать его где-нибудь после небольшого обновления.

Проверьте решение: http://pastebin.com/FAbhneMZ

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

Все лучшие ребята.

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

...