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 路由中使用参数的更多详细信息。
我正在生成一个我不明白的 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 路由中使用参数的更多详细信息。