如何在addRoute语法中实现foreach循环?

时间:2019-05-06 10:45:03

标签: php

我正在从快速路由中间件创建路由器。

// 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

1 个答案:

答案 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]);