Slim router url调用controller而不需要硬编码映射


Slim router url calls controller without hardcoding the map

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

我要做的是自动映射从url拉出的控制器到控制器文件,而不硬编码文件名。如果我去somesite.com/accounting,它工作得很好,但是当我注释掉硬编码路由到会计它不工作,错误丢失参数1 {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();

当在路由中使用parameter时,你必须这样写你的路由路径:

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

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

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

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

关于如何在Slim路由中使用参数的更多细节,请参阅路由参数文档。