Мысли о подкатегории маршрутизации - PullRequest
1 голос
/ 13 июля 2011

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

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

Взяв предыдущий пример, я хотел бы получить доступ к: news / region / sports / baseball / junior-league / 2010который я хотел бы вызвать методом BaseballController :: view (junior-league, 2010).

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

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

Решения, о которых я подумал:

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

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

1 Ответ

1 голос
/ 13 июля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...