Skip to content

Commit ac34043

Browse files
committed
🚧 wip
Signed-off-by: otengkwame <developerkwame@gmail.com>
1 parent cafaf4c commit ac34043

2 files changed

Lines changed: 1793 additions & 1770 deletions

File tree

Core/core/Route/HelperRoute.php

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,20 @@
11
<?php
22

3+
/**
4+
* HelperRoute - A supporting routing class WebbyPHP Route
5+
*
6+
* This class enhances routing
7+
* entirely and handles requests directly
8+
*
9+
* Built for serving simple views and JSON responses
10+
*
11+
*/
12+
313
namespace Base\Route;
414

515
use ArgumentCountError;
616
use Closure;
17+
use ReflectionFunction;
718

819
class HelperRoute
920
{
@@ -290,13 +301,25 @@ protected static function handleJson($data, $status, $params)
290301
* @param Closure $callback The callback
291302
* @param array $params Route parameters
292303
*/
293-
protected static function handleClosure($callback, $params)
304+
protected static function handleClosure($callback, $params = [])
294305
{
295-
if (empty($params)) {
296-
throw new ArgumentCountError('Route::page or Route::json expects at least 1 parameter to be passed. E.g Route::page("uri/(:num)")');
306+
if (! $callback instanceof Closure) {
307+
return call_user_func_array($callback, $params);
308+
}
309+
310+
$reference = new ReflectionFunction($callback);
311+
$provided = count($params);
312+
$required = $reference->getNumberOfRequiredParameters();
313+
314+
if ($required > $provided) {
315+
throw new ArgumentCountError(
316+
"Route::page(...) or Route::json(...) closure expects at least $required parameter(s), " .
317+
"but only $provided value(s) were passed from the URL. " .
318+
"Add more segments like {id} or (:num) to your route."
319+
);
297320
}
298321

299-
call_user_func_array($callback, $params);
322+
return call_user_func_array($callback, $params);
300323
}
301324

302325
/**

0 commit comments

Comments
 (0)