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