Skip to content

Commit 3c2f05f

Browse files
1.101.1
- pre 2.0.0. release - новый метод `getRouter()` теперь поддерживает список замен. А вот роут по-умолчанию надо задавать через `setOption('getRouterDefaultValue', '/')`
1 parent 177e736 commit 3c2f05f

File tree

2 files changed

+36
-20
lines changed

2 files changed

+36
-20
lines changed

src/AppRouter.php

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ class AppRouter implements AppRouterInterface
8989
*
9090
* @var string
9191
*/
92-
private static string $routeReplacePattern = '%%$1%%';
92+
// private static string $routeReplacePattern = '%%$1%%';
9393

9494
/**
9595
* Current Routing Info
@@ -221,9 +221,9 @@ public static function init(LoggerInterface $logger = null, array $options = [])
221221
}
222222

223223
//@todo: документация!
224-
if (array_key_exists('routeReplacePattern', $options)) {
224+
/*if (array_key_exists('routeReplacePattern', $options)) {
225225
self::$routeReplacePattern = $options['routeReplacePattern'];
226-
}
226+
}*/
227227

228228
if (array_key_exists('allowEmptyGroups', $options)) {
229229
self::$option_allow_empty_groups = (bool)$options['allowEmptyGroups'];
@@ -247,10 +247,10 @@ public static function init(LoggerInterface $logger = null, array $options = [])
247247
public static function setOption($name, $value = null)
248248
{
249249
switch ($name) {
250-
case 'routeReplacePattern': {
250+
/*case 'routeReplacePattern': {
251251
self::$routeReplacePattern = $value;
252252
break;
253-
}
253+
}*/
254254
case 'allowEmptyGroups': {
255255
self::$option_allow_empty_groups = (bool)$value;
256256
break;
@@ -578,38 +578,42 @@ public static function group(array $options = [], callable $callback = null)
578578
/**
579579
* Возвращает информацию о роуте по имени
580580
*
581-
* @todo: добавить аргумент "кастомная маска", перекрывающая дефолтное значение?
582-
*
583-
* По-хорошему, getRouter доступен только после dispatch(), уже в обработчиках.
584-
* То есть до списка правил надо стучаться через коллекцию роутов из FastRoute ядра. Но как?
585-
*
586-
* @param string $name
587-
* @param string $default
588-
* @param bool $replace_parts
581+
* @param string $name - имя роута
582+
* @param array $parts - массив замен именованных групп на параметры
589583
* @return string|array
590584
*/
591-
public static function getRouter($name = '', string $default = '/', bool $replace_parts = false)
585+
public static function getRouter($name = '', array $parts = [])
592586
{
593587
if ($name === '*') {
594588
return self::$route_names;
595589
}
596590

597591
if ($name === '') {
598-
return $default;
592+
return self::$option_getroute_default_value;
599593
}
600594

601595
if (array_key_exists($name, self::$route_names)) {
602596
$route = self::$route_names[ $name ];
603597

604-
if ($replace_parts) {
598+
// заменяем именованные группы-плейсхолдеры на переданные переменные?
599+
if (!empty($parts)) {
600+
foreach ($parts as $key => $value) {
601+
$pattern = "/\[?\{({$key})(\:\\\\\w+\+)?\}\]?/";
602+
$route = preg_replace(
603+
$pattern,
604+
$value,
605+
$route
606+
);
607+
}
608+
}
609+
610+
/*if ($replace_parts) {
605611
$route = preg_replace(
606612
'/{([[:word:]]+)}/',
607613
self::$routeReplacePattern,
608614
$route
609615
);
610-
}
611-
612-
//@todo: а как заменять именованные группы-плейсхолдеры на переданные переменные?
616+
}*/
613617

614618
// заменяем необязательный слэш в конце на обязательный
615619
if (self::$option_getroute_replace_optional_slash_to_mandatory) {

src/AppRouterInterface.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,18 @@ interface AppRouterInterface
1515
*/
1616
public static function init(LoggerInterface $logger = null, array $options = []);
1717

18+
/**
19+
* Устанавливает кастомные опции:
20+
* - allowEmptyGroups - разрешить ли пустые группы? (НЕТ)
21+
* - allowEmptyHandlers - разрешить ли пустые хэндлеры (НЕТ)
22+
* - getRouterDefaultValue - роут по-умолчанию, если имя не найдено (/)
23+
*
24+
* @param $name
25+
* @param $value
26+
* @return mixed
27+
*/
28+
public static function setOption($name, $value = null);
29+
1830
/**
1931
* Устанавливает namespace по умолчанию (дублируется в опциях init() )
2032
*
@@ -118,7 +130,7 @@ public static function group(array $options = [], callable $callback = null);
118130
public static function dispatch();
119131

120132

121-
public static function getRouter($name = '', string $default = '/');
133+
public static function getRouter($name = '', array $parts = []);
122134

123135
/**
124136
* Возвращает информацию о текущем роутинге

0 commit comments

Comments
 (0)