超薄路由器URL调用控制器而不对地图进行硬编码

时间:2015-09-25 20:18:36

标签: php slim

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

缺少参数1

我要做的是自动将从网址中拉出的控制器映射到控制器文件,而不对文件名进行硬编码。如果我去somesite.com/accounting它工作正常,但是当我将硬编码路由注释到会计时它不起作用,错误{closure}()缺少参数1。

$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();

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

有关如何使用Slim路径参数的详细信息,请参阅routing parameter documentation