在Slim Framework的文档中,它说
在这个示例应用程序中,所有的路由都在index.php中,但是在这样做会使文件变得相当冗长和笨拙!它很好重构你的应用程序,把路由放到一个不同的文件或文件,或者只是注册一组带有回调函数的路由
它没有说如何实际做到这一点。我唯一的想法是,你可以将代码分割成多个PHP文件,然后使用include
或require
在index.php
引用这些。
我也不确定"注册一组具有实际在其他地方声明的回调的路由"是什么意思
有没有人对此有任何想法,因为我想要构建的应用程序可能有相当多的路由?
作为一个微框架,Slim没有强制执行任何特定的方法。你既可以找到一个现成的结构(我想到了Slim Skeleton Application),也可以自己编写;与其他框架不同,Slim不会试图保护您免受PHP的侵害。
路由定义可以是一个简单的字符串数组:
<?php // routes.php
return [
'/' => ['Foo''Home', 'index'],
'/about' => ['Foo''Home', 'about'],
'/contact' => ['Foo''Contact', 'form' ],
];
…然后在index.php
入口点加载和处理它:
$routes = require('/path/to/routes.php');
foreach ($routes as list($path, $handler)) {
$app->get($route, $handler);
}
您可以利用现有的Composer设置,通过向composer.json
添加适当的目录来自动加载您的类:
{
"require": {
"slim/slim": "^3.3",
"monolog/monolog": "^1.19"
},
"autoload": {
"psr-4": {"Foo''": "./Foo/"}
}
}
从这里开始,它可以变得尽可能复杂:在YAML文件中定义路由,从定义的类中自动加载,等等。
(代码示例是为了说明目的而显示的,甚至可能不是有效的。)
Slim文档中对此有一些想法
代替require
,你可以使用composer自动加载
"注册一组具有实际在别处声明的回调的路由"
From docs:
上面描述的每个路由方法都接受一个回调例程作为其最终参数。这个参数可以是任何PHP可调用的…
所以你可以这样做:
$routeHandler = function ($request, $response) { echo 'My very cool handler'; };
$app->get('/my-very-cool-path', $routeHandler);
但通常人们使用类而不是函数:http://www.slimframework.com/docs/objects/router.html container-resolution
我认为你基本理解对了。我建议阅读几次关于路由的章节。它涵盖了所有内容。
快乐编码,让我知道,如果你需要任何其他帮助!