Slim router url 在不对地图进行硬编码的情况下调用控制器

Slim router url calls controller without hardcoding the map

我正在生成一个我不明白的 SLIM 错误:{closure}() 缺少参数 1

我想做的是自动将从 url 中拉出的控制器映射到控制器文件,而不对文件名进行硬编码。如果我去某个网站它工作正常。com/accounting,但是当我注释掉硬编码路由到会计时它不起作用,错误 Missing argument 1 for {closure}().

$url = str_replace( WEB_PATH, '', $_SERVER['REQUEST_URI']);
$split_url = explode('/', $url);
$controller_name = $split_url[1];


$app = new \Slim\Slim();
$app->get('/', function () 
{
   echo 'home';
});
$app->get('/accounting',  function () 
{
   $controller = new accounting;
});
$app->get('/purchaseOrders',  function () 
{
   $controller = new purchaseOrders;
});
//this should work but does not...
$app->get('/'. $controller_name,  function ($controller_name) 
{
  echo $controller_name;
   $controller = new $controller_name;
});
$app->get('test.php', function () 
{
   $controller = new test;
});
$app->run();

在路由中使用参数时,您必须按如下方式编写路由路径:

$app->get('/:controller_name',  function ($controller_name) 
{
    echo $controller_name;
    $controller = new $controller_name;
});

所有参数都是带有 : 前缀的字符串。如果需要,您可以使用以斜杠分隔的多个参数。

使用上面的代码声明您的路由,Slim 将在内部用参数中的值填充您的 $controller_name 参数。

当访问 /accounting 时,参数将保存值 'accounting'

请参阅 routing parameter documentation 了解有关如何在 Slim 路由中使用参数的更多详细信息。