2011-07-12 3 views
1

Я строю базовую систему маршрутизации, чтобы избавиться от файла index.php? Page_id = 2 и использовать красиво сформированный URL-адрес: новости/региональные/спортивные/бейсбол/юниор-лига/2010 , который, например, перенесет меня в новости о бейсболе младшей лиги в 2010 годуМысли о подкатегории Маршрутизация

Основная структура такова: существует маршрутизатор, который оценивает URL-адрес и получает доступ к соответствующему контроллеру и вызывает метод с некоторыми (необязательные) аргументы. Затем контроллер вызывает соответствующий класс модели и привязывает его к представлению, которое затем выводится.

к предыдущему примеру, я хотел бы получить доступ к: новости/региональные/спорт/бейсбол/юниор-лиги/2010 , который я хотел бы назвать BaseballController :: вид (юниор-лиги, 2010) метод.

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

Как я могу отформатировать мои URL-адреса и указать некоторые правила оценки, чтобы это было получено? (Возможно ли это?)

Solutions Я думал о:

  • Пример URL: новости/региональные/спорт/бейсбол/вид/юниор-лиги/2010
    1. взрываются на косой черты (в результате чего в массиве)
    2. ищет массив [0] контроллер с массивом метода [1]
    3. Если этот метод существует, то называть его с аргументами
    4. Если это не так, ищет массив [1] контроллер с методом массива [2]
    5. и т.д.
      Преимущество в том, что этот подход очень модульный. Дело только в том, что время доступа к странице увеличивается дольше, в зависимости от количества подкатегорий (или это не учитывается?). Возможно, процесс можно ускорить, сохранив карту сайта (но это именно то, чего я не хочу)
  • Формат: аргумент1] - [аргумент2] Пример: новости/региональные/спортивные/бейсбольные/view-junior_league-2010 с использованием этого алгоритма
    1. полоса на «-» (которая генерирует массив) [новости/региональные/спортивные/бейсбольные/view, junior_league, 2010]
    2. взять первый элемент и взорваться на косых [[новости, региональные, спортивные, бейсбольные, view], junior_league, 2010]
    3. поиск метода с именем array [0] [последний] (просмотр) в массиве контроллера [0] [last-1] (бейсбол), который находится в контроллерах каталогов/новостях/региональных/спортивных. Используйте остальные массивы в качестве аргументов.
      Недостаток заключается в том, что вы также используете символ подчеркивания, и URL-адрес уже не очень приятен. И, может быть, это занимает много времени?

Если вы прочитали все это, спасибо! Может быть, вы можете поделиться своими мыслями? Gr Bastiaan

+0

Я поднял ваш вопрос из-за ваших усилий в документации. Из-за отсутствия опыта я могу указать только на сложный компонент маршрутизации https://github.com/symfony/Routing, который работал для меня в прошлом. Поскольку вы просите «мысли» - это может быть не подходящий форум для этого;) – madflow

ответ

1

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

Посмотрите на ToroPHP и, возможно, экстраполируйте часть ее решения в соответствии с вашими потребностями.

+0

Спасибо! Я займусь этим! – Bastiaan

Смежные вопросы