在Slim Framework的documentation上,它说
在此示例应用程序中,所有路由都在index.php中但在 练习这可以制作一个相当长而且笨重的文件!没关系 重构您的应用程序以将路由放入不同的文件或 文件,或只是注册一组回调的路由 实际上在别处宣布。
虽然没有说明如何实际做到这一点。我唯一的想法是你可以将代码分成多个PHP文件,然后使用include
中的require
或index.php
来引用这些文件。
我也不确定“注册一组实际在其他地方宣布的回调的路线”是什么意思
有没有人对此有任何想法,因为我想要构建的应用程序可能有很多路径?
答案 0 :(得分:7)
作为一个微框架,Slim不强制执行任何特定方法。您可以找到一个随时可用的结构(Slim Skeleton Application出现在我的脑海中)或自己编写;与其他框架不同,Slim并不试图保护您免受PHP的攻击。</ p>
路由定义可以像字符串数组一样简单:
<?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.json
来利用现有的Composer设置来自动加载您的类:
{
"require": {
"slim/slim": "^3.3",
"monolog/monolog": "^1.19"
},
"autoload": {
"psr-4": {"Foo\\": "./Foo/"}
}
}
从这里开始,它可以根据需要变得复杂:在YAML文件中定义路由,从定义的类中自动加载等等。
(代码示例仅供参考,甚至可能无效。)
答案 1 :(得分:4)
您可以使用composer autoloading
代替require
“注册一组具有实际在其他地方声明的回调的路线”
来自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
我认为你几乎可以得到正确的基本想法。我建议阅读有关路由的章节几次。它涵盖了一切都很好。
快乐编码,如果您需要任何其他帮助,请告诉我们!