|
Абырвалг ↓
|
 |
|
28 Октябрь, 2010, 12:03:54
|
НЕ ХУЕТА!
ХУЕТА!
|
PHP Infected, симфоеб, маконенавистник
Группа: Джедаи Карма: 80
Сообщений: 6096 Сила слова: 1.31
|
В очередной раз реализовываю роутинг.
сорцы
Z:\home\localhost\pyha\tests>phpunit Pyha\Tests\Component\Routing\
PHPUnit 3.5.2 by Sebastian Bergmann.
................................................
Time: 0 seconds, Memory: 5.00Mb
OK (48 tests, 99 assertions)
примеры использования завтра
|
|
|
|
Записан
|
PHP does the job since 1995 Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
|
|
|
|
Givi ↓
|
 |
|
28 Октябрь, 2010, 10:29:57 , спустя 10 часов 26 минут 3 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 42
Сообщений: 2305 Сила слова: 1.82
|
я нихуя не понимаю в этих всех цифрах, потому хочу спросить: 5Мб памяти под что уходит, под твой роутер? Если да. то это пиздец, а если нет, то вопрос: нахуй вообще приводить эти непонятно-что-значащие цифры?
|
|
|
|
|
Записан
|
Все, что говорят другие - неправда! До тех пор, пока ты сам в это не поверишь. Если человек дурак, то... чур это не я!
|
|
|
|
Troy ↓
|
 |
|
28 Октябрь, 2010, 10:39:17 , спустя 9 минут 20 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи Карма: 45
Сообщений: 2393 Сила слова: 1.88
|
джемс примеров)
|
|
|
|
|
Записан
|
|
|
|
|
phpdude ↓
|
 |
|
28 Октябрь, 2010, 11:15:25 , спустя 36 минут 8 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 344
Сообщений: 20790 Сила слова: 1.65
|
Pyha\Routing
какое отношение это г имеет к пыхе?
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
Абырвалг ↓
|
 |
|
28 Октябрь, 2010, 01:06:12 , спустя 1 час 50 минут 47 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
PHP Infected, симфоеб, маконенавистник
Группа: Джедаи Карма: 80
Сообщений: 6096 Сила слова: 1.31
|
Givi, это все phpunit, сам роутинг жрет куда меньше
Troy, будут, вечером Спустя 59 секунд добавил phpdude, я просто взял и нагло использовал название пыхи для ребрендинга своих BL
|
|
|
|
|
Записан
|
PHP does the job since 1995 Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
|
|
|
|
phpdude ↓
|
 |
|
28 Октябрь, 2010, 01:07:34 , спустя 1 минуту 22 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 344
Сообщений: д-о-х-у-я! Сила слова: 1.65
|
phpdude, я просто взял и нагло использовал название пыхи для ребрендинга своих BL
а кто тебе давал на это право?)))) не, ну ты делай делай, потом я зарегаю торговую марку Pyha и буду продавать твой гавнокод :D
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
Абырвалг ↓
|
 |
|
29 Октябрь, 2010, 12:58:21 , спустя 23 часа 50 минут 47 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
PHP Infected, симфоеб, маконенавистник
Группа: Джедаи Карма: 80
Сообщений: 6096 Сила слова: 1.31
|
Итак, Pyha\Routing - компонент для разбора URL и их генерации.
Вы все не маленькие, с autoload'ом думаю разберетесь сами. Можете свой autoload использовать или гляньте tests/bootstrap.php, там все предельно ясно.
Перво-наперво нужно создать объект Request. В нем хранится информация о GET-параметрах и некоторые значения SERVER.
use Pyha\Component\Routing;
$serverParams = array(
'method' => 'post',
'host' => 'pyha.localhost',
'path' => '/', // REQUEST_URI
'is_secure' => false,
'port' => 80,
'is_ajax' => false,
'base_url' => 'http://pyha.localhost/'
);
$request = new Routing\Request ($serverParams, $_GET);
осторожно - вы сами обрезаете часть REQUEST_URI, в которой находится base_path (это актуально когда сайт находится не в корне а в подпапке).
Потом через этот же $request можно будет получить совпавшие параметры (toArray(), getQueryParam($key))
// создаем объект роутера
$router = new Routing\Router ($request);
// добавляем стандартные ресолверы
$router
-> addRouteResolvers(array(
new Routing\RouteResolver_Static (),
new Routing\RouteResolver_Regexp (),
new Routing\RouteResolver_Modular (),
new Routing\RouteResolver_Hostname (),
new Routing\RouteResolver_Chain ()
));
Ресолвер непосредственно занимается проверкой совпадения маршрута и генерацией URL'а. Вы можете написать свои ресолверы, для этого есть соотв. интерфейс или даже абстрактный класс.
Роуты задаются массивом. Обязательный параметр - type (static/regexp/...) - нужно ж знать каким ресолвером проверять совпадение.
$router
-> addRoute('account.login', array(
'type' => 'static',
'uri' => 'login',
'module' => 'account',
));
Кроме того для разных типов роутов свои обязательные параметры, накладываемые ресолвером. Например uri для статического, pattern, pattern_reverse для регекспного.
Дополнительно маршруту можно задать module, controller, action. Некоторым можно задать еще params (совпавшие параметры) query (просто параметры).
После того, как добавили все нужные нам роуты - ищем совпавший маршрут.
$router->match();
возвращает bool. После этого в нашем $request находятся параметры из совпавшего роута. Или не находятся, если ничего не совпало. Можно узнать какой же именно маршрут совпал при помощи $router->getMatchedRouteName().
Немного о chain ресолвере: он предназначен для разбора разных частей $request. Создаем цепочку правил разбора. То есть нельзя одновременно проверять совпадения в path, но можно проверить hostname и path.
Например мы хотим вынести на субдомен форум. Создаем соответствующий маршрут
$forumRoute = array(
'type' => 'hostname',
'pattern' => 'forum.pyha.localhost',
'reverse_pattern' => 'forum.pyha.localhost',
'module' => 'forum',
),
$router
-> addRoutes(array(
'forum.board.view' => array(
'type' => 'chain',
'routes' => array(
$forumRoute, // вот она, цепочка правил
array(
'type' => 'regexp',
'pattern' => '(\d+)',
'reverse_pattern' => '%d',
'params' => array('board_id'),
'controller' => 'board',
'action' => 'view'
),
),
),
'forum.topic' => array(
'type' => 'chain',
'routes' => array(
$forumRoute,
array(
'type' => 'regexp',
'pattern' => '(\d+)/(\d+)', // шаблон для поиска совпадения урл
'reverse_pattern' => '%d/%d', // шаблон для генерации урл
'params' => array('board_id', 'topic_id'), // параметры, которые должны совпасть
'controller' => 'topic',
'action' => 'view'
),
),
),
);
итак, вернемся к нашему $serverParams, с которого все начиналось.
$serverParams['host'] = 'forum.pyha.localhost';
$serverParams['path'] = '/foo';
// ничего не совпадет
$serverParams['host'] = 'forum.pyha.localhost';
$serverParams['path'] = '/12';
// совпадет маршрут forum.board.view
теперь в $request будет находиться такое
array(
'_module' => 'forum',
'_controller' => 'board',
'_action' => 'view',
'board_id' => 12
);
// а при раскладе
$serverParams['host'] = 'forum.pyha.localhost';
$serverParams['path'] = '/12/41';
// будет
array(
'_module' => 'forum',
'_controller' => 'topic',
'_action' => 'view',
'board_id' => 12,
'topic_id' => 41
);
Спустя 3 минуты 44 секунды добавил обратную генерацию URL рассмотрим несколько позже
|
|
|
|
|
Записан
|
PHP does the job since 1995 Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
|
|
|
|
phpdude ↓
|
 |
|
29 Октябрь, 2010, 01:08:23 , спустя 10 минут 2 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 344
Сообщений: д-о-х-у-я! Сила слова: 1.65
|
сложно чото очень)
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
Status ↓
|
 |
|
29 Октябрь, 2010, 02:08:14 , спустя 59 минут 51 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
Редкостная сволочь
Группа: Джедаи Карма: 57
Сообщений: 1447 Сила слова: 3.94
|
Красота в простоте, а это как то уж слишком завернуто...
|
|
|
|
|
Записан
|
Заткнись говно, я воевал!
|
|
|
|
Sinkler ↓
|
 |
|
29 Октябрь, 2010, 02:11:22 , спустя 3 минуты 8 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Похуй, пляшем!
Группа: Джедаи Карма: 73
Сообщений: 6805 Сила слова: 1.07
|
гляньте tests/bootstrap.php
где смотреть?
|
|
|
|
|
Записан
|
|
|
|
|
Абырвалг ↓
|
 |
|
29 Октябрь, 2010, 02:18:43 , спустя 7 минут 21 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
PHP Infected, симфоеб, маконенавистник
Группа: Джедаи Карма: 80
Сообщений: 6096 Сила слова: 1.31
|
Sinkler, https://bitbucket.org/Koc/pyha/src/tip/tests/bootstrap.php Спустя 2 минуты 9 секунд добавил хули тут сложного? это очень простая система роутинга.
Я специально не делал никаких xml/yaml/ini лоадеров и дамперов, так как считаю что это проблема другого слоя Спустя 28 секунд добавил у нее даже нет никаких зависимостей от других компонентов/либ Спустя 3 минуты 54 секунды добавил а если нет, то вопрос: нахуй вообще приводить эти непонятно-что-значащие цифры?
это результаты юнит-тестов. На картинке диаграммы покрытия кода тестами
|
|
|
|
|
Записан
|
PHP does the job since 1995 Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
|
|
|
|
Status ↓
|
 |
|
29 Октябрь, 2010, 02:28:28 , спустя 9 минут 45 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Редкостная сволочь
Группа: Джедаи Карма: 57
Сообщений: 1447 Сила слова: 3.94
|
Насяйника не сердись:) Лыба харосый:)
Это я так смотрю как одной фразой серьезную тему превратить в цирк))))
|
|
|
|
|
Записан
|
Заткнись говно, я воевал!
|
|
|
|
Troy ↓
|
 |
|
29 Октябрь, 2010, 02:32:14 , спустя 3 минуты 46 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи Карма: 45
Сообщений: 2393 Сила слова: 1.88
|
Нормально все, достаточно мощная библиотека, даже + дам, много параметров, просто надо немного допилить и всё
|
|
|
|
|
Записан
|
|
|
|
|
Troy ↓
|
 |
|
29 Октябрь, 2010, 02:43:40 , спустя 11 минут 26 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи Карма: 45
Сообщений: 2393 Сила слова: 1.88
|
В Yii кстати отличный роутинг, например можно сделать так:
'http://<user:[^www]>.site.ru/<action>' => 'user/<action>'
В $_GET['user'] будет субдомен
|
|
|
|
|
Записан
|
|
|
|
|
KaFe ↓
|
 |
|
30 Октябрь, 2010, 12:34:01 , спустя 9 часов 50 минут 21 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Сраный Тролль Карма: -13346
Сообщений: 1727 Сила слова: -772.79
|
Объясните мне вообще зачем нужна эта библа, вообще какой в ней смысл?
Я буду горячей, чем испанские перцы, если ее буду использовать?
|
|
|
|
|
Записан
|
|
|
|
|