我正在从快速路由中间件创建路由器。
// routes.php
return [
['GET', '/1', ['ShowMe','demo']],
['GET', '/2', ShowMe::class],
];
如果我将其手动包含在simpleDispatcher的功能中,则一切正常-两条路线都有效:
// $r->addRoute('GET', '/ddd', ['ShowMe','demo']);
// $r->addRoute('GET', '/ddd', ShowMe::class);
但是,如果我想从route.php加载路由,则使用以下代码:
foreach ($routes as $key => $route) {
$r->addRoute($route[0], $route[1], [$route[2][0], $route[2][1]]);
}
此功能非常适合如下调用函数的路由: ['GET','/ 1',['ShowMe','demo']],
因此,我进行了修改(因为我有2种路由类型,并且希望此语法支持它们两者):
$r->addRoute($route[0], $route[1], [implode(",", $route[2])]);
现在在两种路由类型中均不起作用:
Warning: implode(): Invalid arguments passed in ...\index.php on line 69
Fatal error: Uncaught RuntimeException: Invalid request handler: array
答案 0 :(得分:2)
您的foreach
循环语法中有错误
语法为foreach($arrayName as $key => $value)
foreach ($routes as $key => $route) {
$r->addRoute($routes[$key]); # or simply $r->addRoute($route);
}
第二,implode()
函数将数组作为字符串返回,我猜想您不需要。
所以只需说:
$r->addRoute($route[0], $route[1], $route[2]);