22
33namespace PhpSlides \Core \Http ;
44
5+ use Closure ;
56use PhpSlides \Exception ;
67use PhpSlides \Core \Controller \Controller ;
78use PhpSlides \Core \Http \Interface \ApiInterface ;
@@ -22,7 +23,7 @@ class Api extends Controller implements ApiInterface
2223 * The base URL for all API routes. Default is '/api/'
2324 * @var string
2425 */
25- public static string $ BASE_URL = '/api/ ' ;
26+ private string $ base_url = '/api/ ' ;
2627
2728 /**
2829 * The API version. Default is 'v1'
@@ -34,6 +35,10 @@ class Api extends Controller implements ApiInterface
3435
3536 private ?array $ guards = null ;
3637
38+ private bool $ caseSensitive = false ;
39+
40+ private ?Closure $ handleInvalidParameterType = null ;
41+
3742 private static array $ regRoute = [];
3843
3944 private static array $ allRoutes ;
@@ -101,11 +106,10 @@ public function route (
101106 // checks if $define is set, then assign $define methods to $url & $controller parameters
102107 $ url =
103108 $ define !== null
104- ? rtrim ($ define ['url ' ], '/ ' ) . '/ ' . trim ($ url , '/ ' )
109+ ? trim ($ define ['url ' ], '/ ' ) . '/ ' . trim ($ url , '/ ' )
105110 : trim ($ url , '/ ' );
106- $ url = trim ($ url , '/ ' );
107111
108- $ uri = strtolower ( self :: $ BASE_URL . self ::$ version . '/ ' . $ url) ;
112+ $ uri = $ this -> base_url . self ::$ version . '/ ' . $ url ;
109113 self ::$ regRoute [] = $ uri ;
110114
111115 $ route = [
@@ -146,6 +150,26 @@ public function withGuard (?string ...$guards): self
146150 return $ this ;
147151 }
148152
153+ public function prefix (?string $ url = '/api/ ' ): self
154+ {
155+ $ this ->base_url = $ url ;
156+ return $ this ;
157+ }
158+
159+ public function caseSensitive (): self
160+ {
161+ $ route = is_array (self ::$ regRoute ) ? self ::$ regRoute [0 ] : self ::$ regRoute ;
162+ $ GLOBALS ['__registered_api_routes ' ][$ route ]['caseSensitive ' ] = true ;
163+ return $ this ;
164+ }
165+
166+ public function handleInvalidParameterType (Closure $ closure ): self
167+ {
168+ $ route = is_array (self ::$ regRoute ) ? self ::$ regRoute [0 ] : self ::$ regRoute ;
169+ $ GLOBALS ['__registered_api_routes ' ][$ route ]['handleInvalidParameterType ' ] = $ closure ;
170+ return $ this ;
171+ }
172+
149173 /**
150174 * Defines a base URL and controller for subsequent route mappings.
151175 *
@@ -179,13 +203,12 @@ public function map (array $rest_url): self
179203 * Get the map value, keys as the route url
180204 */
181205 $ routes = array_keys ($ rest_url );
182- $ base = strtolower (
183- self :: $ BASE_URL .
206+ $ base =
207+ $ this -> base_url .
184208 self ::$ version .
185209 '/ ' .
186210 trim ($ define ['url ' ], '/ ' ) .
187- '/ ' ,
188- );
211+ '/ ' ;
189212
190213 /**
191214 * Map route url array to the full base url
@@ -227,6 +250,12 @@ public static function v1 (): self
227250 return self ::__callStatic ('v1 ' , 0 );
228251 }
229252
253+ /**
254+ * Define an API route for version 1.0
255+ * Also in use for defining urls
256+ *
257+ * @return self
258+ */
230259 public static function v1_0 (): self
231260 {
232261 return self ::__callStatic ('v1_0 ' , 0 );
0 commit comments