You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- PHP 8 version
- используются именованные поля в методах
- опции задаются через константы
- экспериментальная фича: алиасы для регулярок
- оптимизация `compileHandler()`
- getRouter('*') раскрывает группы
- обновленный и подробный README
-`prefix` - текущий префикс URL (аналогично поведению для групп)
28
-
-`routeReplacePattern` - ?
29
-
-`allowEmptyHandlers` (false) - разрешить пустые (заданные как `[]`) хэндлеры? Если false - кидается исключение `AppRouterHandlerError: Handler not found or empty`.
30
-
-`allowEmptyGroups` (false) - разрешить ли пустые группы? Пустой считается группа без роутов. Если разрешено - для такой группы будут парситься миддлвары и опции.
81
+
-`namespace` - неймспейс по-умолчанию, может быть задан вызовом `AppRouter::setDefaultNamespace()`
82
+
-`prefix` - префикс URL (аналогично поведению для групп)
83
+
-`allowEmptyHandlers` (false) - разрешить ли пустые хэндлеры?
84
+
-`allowEmptyGroups` (false) - разрешить ли пустые группы?
31
85
32
-
Важно отметить, что "пустой" handler может быть описан двумя способами:
86
+
## setOption - переопределение опций
33
87
34
-
-`null` - такой handler просто пропускается, роут в таком случае вернет `AppRouter::NotFoundException: URL not found`
35
-
-`[]` - поведение зависит от опции `allowEmptyHandlers`:
36
-
-`= true` - хэндлер не делает ничего, хотя проходится вся цепочка посредников до него и после него
37
-
-`= false` - кидается исключение `AppRouterHandlerError - Handler not found or empty`
88
+
Некоторые опции могут быть переопределены только вызовом:
38
89
90
+
```php
91
+
AppRouter::setOption(name, value);
92
+
```
93
+
94
+
Допустимые имена опций:
95
+
-`AppRouter::OPTION_ALLOW_EMPTY_HANDLERS` - разрешить пустые (заданные как `[]`) хэндлеры? Если false - кидается исключение `AppRouterHandlerError: Handler not found or empty`.
96
+
-`AppRouter::OPTION_ALLOW_EMPTY_GROUPS` - разрешить ли пустые группы? Пустой считается группа без роутов. Если разрешено - для такой группы будут парситься миддлвары и опции.
97
+
-`AppRouter::OPTION_DEFAULT_ROUTE` - дефолтное значение для реверс-роутинга
98
+
-`AppRouter::OPTION_USE_ALIASES` - разрешить ли алиасы?
-`route` - строка (с регулярками/алиасами регулярок)
114
+
-`handler` - хэндлер
115
+
-`name` - имя роута для обратного роутинга (reverse routing)
45
116
46
-
AppRouter::group([
47
-
'prefix' => '/auth',
48
-
'namespace' => 'Auth',
49
-
'before' => static function () { CLIConsole::say('Called BEFORE middleware for /auth/*'); },
50
-
'after' => null
51
-
], static function() {
117
+
### Как можно задать handler?
52
118
53
-
AppRouter::get('/login', function () {
54
-
CLIConsole::say('Call /auth/login');
55
-
});
119
+
-`function() { }`, то есть Closure;
120
+
-`[Class::class, 'method']` - массив из двух элементов, подразумевается, что метод динамический, то есть класс будет инстанциирован перед вызовом метода.
121
+
-`Class@method` - строка, содержащая `@`. Будет применена рефлексия для вычисления типа метода. Если метод динамический - класс будет инстанциирован.
122
+
-`Class@` - будет вызван метод `__invoke()` у класса.
123
+
-`function` - функция
124
+
-`null` - строго пустой роут, вызов **всегда** выбросит исключение `AppRouterNotFoundException -> URL not found`
125
+
-`[]`. По умолчанию будет выброшено исключение `AppRouterHandlerError`, но... есть нюанс:
В этом случае пройдет стандартная цепочка роутинга - будут инстанциированы и вызваны миддлвары, сначала before, потом в обратном порядке after, например:
137
+
138
+
```
139
+
string(30) "Class MiddleAdmin instantiated"
140
+
string(19) "MiddleAdmin::before"
141
+
string(35) "Class MiddleAdminUsers instantiated"
142
+
string(24) "MiddleAdminUsers::before"
64
143
65
-
AppRouter::get('/get', function (){
66
-
CLIConsole::say('Call from /test/get (declared after /ajax prefix group');
67
-
});
144
+
<тут должен был обрабатываться хэндлер, но он пуст>
0 commit comments