10
10
11
11
namespace Buki \Router ;
12
12
13
- use Buki \Router \RouterCommand ;
14
- use Buki \Router \RouterException ;
15
- use Buki \Router \RouterRequest ;
16
13
use Closure ;
17
14
use Exception ;
18
15
use ReflectionMethod ;
@@ -43,7 +40,7 @@ class Router
43
40
/**
44
41
* Router Version
45
42
*/
46
- const VERSION = '2.2.1 ' ;
43
+ const VERSION = '2.3.0 ' ;
47
44
48
45
/**
49
46
* @var string $baseFolder Pattern definitions for parameters of Route
@@ -64,11 +61,14 @@ class Router
64
61
* @var array $patterns Pattern definitions for parameters of Route
65
62
*/
66
63
protected $ patterns = [
67
- ':id ' => '(\d+) ' ,
68
- ':number ' => '(\d+) ' ,
69
- ':any ' => '([^/]+) ' ,
70
64
':all ' => '(.*) ' ,
71
- ':string ' => '(\w+) ' ,
65
+ ':any ' => '([^/]+) ' ,
66
+ ':id ' => '(\d+) ' ,
67
+ ':int ' => '(\d+) ' ,
68
+ ':number ' => '([+-]?([0-9]*[.])?[0-9]+) ' ,
69
+ ':float ' => '([+-]?([0-9]*[.])?[0-9]+) ' ,
70
+ ':bool ' => '(true|false|1|0) ' ,
71
+ ':string ' => '([\w\-_]+) ' ,
72
72
':slug ' => '([\w\-_]+) ' ,
73
73
':uuid ' => '([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}) ' ,
74
74
':date ' => '([0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])) ' ,
@@ -390,30 +390,24 @@ public function controller(string $route, string $controller, array $options = [
390
390
}
391
391
}
392
392
393
- $ methodVar = lcfirst (preg_replace ('/ ' . $ method . '/i ' , '' , $ methodName , 1 ));
393
+ $ methodVar = lcfirst (
394
+ preg_replace ('/ ' . $ method . '_?/i ' , '' , $ methodName , 1 )
395
+ );
394
396
$ methodVar = strtolower (preg_replace ('%([a-z]|[0-9])([A-Z])% ' , '\1-\2 ' , $ methodVar ));
395
397
396
- if (!empty ($ only ) && !in_array ($ methodVar , $ only )) {
397
- continue ;
398
- }
399
-
400
- if (!empty ($ except ) && in_array ($ methodVar , $ except )) {
398
+ if ((!empty ($ only ) && !in_array ($ methodVar , $ only ))
399
+ || (!empty ($ except ) && in_array ($ methodVar , $ except ))) {
401
400
continue ;
402
401
}
403
402
404
403
$ ref = new ReflectionMethod ($ controller , $ methodName );
405
404
$ endpoints = [];
406
405
foreach ($ ref ->getParameters () as $ param ) {
407
406
$ typeHint = $ param ->hasType () ? $ param ->getType ()->getName () : null ;
408
- if (in_array ($ typeHint , ['int ' ])) {
409
- $ pattern = ':id ' ;
410
- } elseif (in_array ($ typeHint , ['string ' , 'float ' , 'bool ' ])) {
411
- $ pattern = ':slug ' ;
412
- } elseif ($ typeHint === null ) {
413
- $ pattern = ':any ' ;
414
- } else {
407
+ if (!in_array ($ typeHint , ['int ' , 'float ' , 'string ' , 'bool ' ]) && $ typeHint !== null ) {
415
408
continue ;
416
409
}
410
+ $ pattern = $ this ->patterns [": {$ typeHint }" ] ? ": {$ typeHint }" : ":any " ;
417
411
$ endpoints [] = $ param ->isOptional () ? "{$ pattern }? " : $ pattern ;
418
412
}
419
413
@@ -785,7 +779,7 @@ protected function getRequestUri(): string
785
779
$ dirname = dirname ($ script );
786
780
$ dirname = $ dirname === '/ ' ? '' : $ dirname ;
787
781
$ basename = basename ($ script );
788
- $ uri = str_replace ([$ dirname , $ basename ],null , $ this ->request ()->server ->get ('REQUEST_URI ' ));
782
+ $ uri = str_replace ([$ dirname , $ basename ], null , $ this ->request ()->server ->get ('REQUEST_URI ' ));
789
783
return $ this ->clearRouteName (explode ('? ' , $ uri )[0 ]);
790
784
}
791
785
}
0 commit comments