@@ -60,10 +60,12 @@ public function matchRoute(Request $request) {
60
60
61
61
$ isParameter = true ;
62
62
} elseif ($ isParameter && $ character === '} ' ) {
63
+ $ required = false ;
63
64
// Check for optional parameter
64
65
if ($ lastCharacter === '? ' ) {
65
66
$ parameter = substr ($ parameter , 0 , strlen ($ parameter )-1 );
66
67
$ regex .= '(?:(?:\/{0,1}(?P< ' .$ parameter .'>[a-z0-9]*?)){0,1} \\/) ' ;
68
+ $ required = true ;
67
69
} else {
68
70
// Use custom parameter regex if it exists
69
71
$ parameterRegex = '[a-z0-9]*? ' ;
@@ -74,7 +76,7 @@ public function matchRoute(Request $request) {
74
76
75
77
$ regex .= '(?: \\/{0,1}(?P< ' . $ parameter . '> ' . $ parameterRegex .') \\/) ' ;
76
78
}
77
- $ parameterNames [] = $ parameter ;
79
+ $ parameterNames [] = array ( ' value ' => $ parameter, ' required ' => $ required ) ;
78
80
$ parameter = '' ;
79
81
$ isParameter = false ;
80
82
@@ -97,7 +99,13 @@ public function matchRoute(Request $request) {
97
99
98
100
if (count ($ parameterNames )) {
99
101
foreach ($ parameterNames as $ name ) {
100
- $ parameters [$ name ] = isset ($ parameterValues [$ name ]) ? $ parameterValues [$ name ] : null ;
102
+ $ parameterValue = (isset ($ parameterValues [$ name ['value ' ]]) && !empty ($ parameterValues [$ name ['value ' ]])) ? $ parameterValues [$ name ['value ' ]] : null ;
103
+
104
+ if ($ name ['required ' ] && $ parameterValue === null ) {
105
+ throw new RouterException ('Missing required parameter ' . $ name ['name ' ], 404 );
106
+ }
107
+
108
+ $ parameters [$ name ] = $ parameterValue ;
101
109
}
102
110
}
103
111
0 commit comments