ФорумСообществоФлейм → Routing

Routing

  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 15 июля 2011 г. 2:13

    Кажется, эту тему можно мусолить вечно. Выскажите пожалуйста свои требования к системе роутинга. Что она должна уметь?
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 15 июля 2011 г. 2:49, спустя 36 минут 22 секунды

    она должна быть пиздатой
    Спустя 57 сек.
    а. и она должна распознавать роуты
    не всё полезно, что в swap полезло
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 24 февраля 2013 г. 8:33, спустя 590 дней 6 часов 43 минуты

    и передавать переменные строки запроса в контроллер
    и собирать url из параметров обратно

    больше от неё ничего не требуется
    не всё полезно, что в swap полезло
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 15 июля 2011 г. 3:05, спустя 17 часов 31 минуту 25 секунд

    master, не убавить не прибавить. отличная постановка. еще бы где-то фабьена присунуть для убедительности
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 15 июля 2011 г. 3:20, спустя 14 минут 54 секунды


    master, не убавить не прибавить. отличная постановка. еще бы где-то фабьена присунуть для убедительности
    можно мастеру отображаемое имя сменить на fabien и будет самое оно! xD
    Сапожник без сапог
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 15 июля 2011 г. 3:26, спустя 6 минут 39 секунд

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

    например, есть роут
    :brand/:model
    как передать параметром значение model равное "MT T/A KM" ?

    "site.com/BF+Goodrich/MT+T%2FA+KM" - если так, то в mod_rewrite есть замечательный баг, а именно:
    мод-реврайт _сначала_ раскодирует символ %2F, получит урл "site.com/BF+Goodrich/MT+T/A+KM", и к полученному урлу НЕ применит реврайт-правило. т.е. попытается найти папку BF Goodrich, в ней MT T, в ней A KM, хотя он должен не искать папку, а перенаправить запрос на index.php
    не всё полезно, что в swap полезло
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 15 июля 2011 г. 3:34, спустя 7 минут 38 секунд

    решение:
    1. твой роутер на пэхапэ, а не мод реврайт должен разбирать параметры.
    мод реврайт пускай просто перебрасывает на индекс БЕЗ параметров. индекс анализирует $_SERVER['REQUEST_URI'] вместо $_GET
    2. правила роутинга должны быть сформулированы таким образом чтобы избежать неоднозначности. например
    ^brand/(.+)/model/(.+)$
    здесь слова brand и model это буквально brand и model. ну ты понел )))
    ιιlllιlllι унц-унц
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 15 июля 2011 г. 3:42, спустя 7 минут 46 секунд

    твой роутер на пэхапэ, а не мод реврайт должен разбирать параметры.

    так и есть, и ваще там суть не в том оказалась

    ^brand/(.+)/model/(.+)$

    я извиняюсь, но пихать имена параметров в урл - моветон, особенно учитывая влияние урл на seo
    не всё полезно, что в swap полезло
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 15 июля 2011 г. 4:29, спустя 47 минут 26 секунд

    Юзаю Django URL dispatcher, всё нравится
    adw/0
  • Sinkler

    Сообщения: 8096 Репутация: N Группа: в ухо

    Spritz 15 июля 2011 г. 4:39, спустя 10 минут 17 секунд

    adw0rd, кто бы сомневался :DDD это уже из серии "спасибо, кеп" :DDDD
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 15 июля 2011 г. 4:42, спустя 2 минуты 54 секунды


    решение:
    1. твой роутер на пэхапэ, а не мод реврайт должен разбирать параметры.
    мод реврайт пускай просто перебрасывает на индекс БЕЗ параметров. индекс анализирует $_SERVER['REQUEST_URI'] вместо $_GET

    а если на сайте лям траффика - разруливать его index.php должен, а? как частный случай скажем
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 15 июля 2011 г. 5:05, спустя 23 минуты 4 секунды

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

    Итак, как Мастер уже сказал, главные задачи роутера:
    1) на основании пришедшего запроса найти соответствие контроллеру и передать в него необходимые параметры
    2) предоставить возможность на основании контроллера и параметров сгенерировать ссылку (reverse)

    оок.

    Идем глубже.
    По каким критериям нужно находить соответствия?
    1.1) совпадение uri по шаблону
    1.2) совпадение метода(ов): GET|PUT
    1.3) совпадение домена, в том числе тоже по шаблону

    Должен присутствовать механизм загрузки роутов (loaders), по возможности из разных форматов (phpArray, xml, yml, annotations). Но при этом стоит учесть, что все роуты подгрузить не удастся (например их 100500 и они в базе данных), поэтому matcher должен уметь например залезть в базу. Кроме того следует реализовать чайнинг, именно на уровне loaders:

    route-name-2
    suffix: .html
    hostname: {username}.%base_site_hostname%
    import: file/with/subroutes.yml

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

    Некоторые параметры могут быть необязательными:
    news/
    news/2 - страница 2
    news/page2 - тоже страница 2

    при разборе URL'а это относительно просто учесть. При генерации же сложнее. Роутинг Symfony2, напимер, съест слеш на конце, что как бы неправильно



    Вероятнее всего роуты должны компилироваться в нативный пхп для увеличения быстродействия. Также хорошо бы выделять группы роутов, для оптимизации:
    // example of compiled routing
    if ('/blog' === substr($requestContext['path'], 0, 5)) {
    // пошла группа правил
    }
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 15 июля 2011 г. 5:52, спустя 46 минут 30 секунд



    решение:
    1. твой роутер на пэхапэ, а не мод реврайт должен разбирать параметры.
    мод реврайт пускай просто перебрасывает на индекс БЕЗ параметров. индекс анализирует $_SERVER['REQUEST_URI'] вместо $_GET

    а если на сайте лям траффика - разруливать его index.php должен, а? как частный случай скажем
    стопудово
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 15 июля 2011 г. 5:55, спустя 2 минуты 59 секунд


    ^brand/(.+)/model/(.+)$

    я извиняюсь, но пихать имена параметров в урл - моветон, особенно учитывая влияние урл на seo

    как скажешь ))) мне пох и гуглю тоже
    ιιlllιlllι унц-унц
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 15 июля 2011 г. 8:52, спустя 2 часа 57 минут 15 секунд

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

    Я о том, что роутинг должен уметь то, что умеет джанговский URL диспетчер (как по мне). Поэтому я его и использую, и всячески рекомендую.
    Лучшего решения (гибкость и простота) я пока не видел…

    Кеп/не кеп оставьте для школоты
    adw/0

Пожалуйста, авторизуйтесь, чтобы написать комментарий!