Slim Framework - 将代码拆分为index.php以外的多个文件

And*_*ndy 7 php slim

关于Slim Framework 的文档,它说

在这个示例应用程序中,所有路由都在index.php中,但实际上这可能会产生一个相当长且难以处理的文件!可以重构您的应用程序以将路由放入不同的文件或文件中,或者只注册一组具有实际在其他地方声明的回调的路由.

它没有说明如何实际做到这一点.我唯一的想法是,你可以拆分代码到多个PHP文件,然后使用includerequireindex.php引用这些.

我也不确定它是什么意思"注册一组带有实际在其他地方声明的回调的路由"

有没有人对此有任何想法,因为我想要构建的应用程序可能有相当多的路由?

Álv*_*lez 8

作为一个微框架,Slim不强制执行任何特定的方法.您可以找到一个随时可用的结构(我想到的是Slim Skeleton Application)或者编写自己的结构; 与其他框架不同,Slim并不试图保护您免受PHP的侵害.

路径定义可以像字符串数组一样简单:

<?php // routes.php
return [
    '/'        => ['Foo\\Home',    'index'],
    '/about'   => ['Foo\\Home',    'about'],
    '/contact' => ['Foo\\Contact', 'form' ],
];
Run Code Online (Sandbox Code Playgroud)

...然后在您的index.php入口点加载和处理:

$routes = require('/path/to/routes.php');
foreach ($routes as list($path, $handler)) {
    $app->get($route, $handler);
}
Run Code Online (Sandbox Code Playgroud)

您可以通过将适当的目录添加到composer.json以下内容来利用现有的Composer设置来自动加载您的类:

{
    "require": {
        "slim/slim": "^3.3",
        "monolog/monolog": "^1.19"
    },
    "autoload": {
        "psr-4": {"Foo\\": "./Foo/"}
    }
}
Run Code Online (Sandbox Code Playgroud)

从这里开始,它可以根据需要变得复杂:在YAML文件中定义路由,从定义的类中自动加载等.

(代码示例仅供参考,甚至可能无效.)


Sta*_*rov 5

Slim 文档中有一些关于它的想法

require您可以使用Composer 自动加载代替's


“注册一组带有回调的路由,这些路由实际上是在别处声明的”

文档

上面描述的每个路由方法都接受一个回调例程作为其最终参数。这个参数可以是任何 PHP 可调用的......

所以你可以这样做:

$routeHandler = function ($request, $response) { echo 'My very cool handler'; };
$app->get('/my-very-cool-path', $routeHandler);
Run Code Online (Sandbox Code Playgroud)

但通常人们使用类而不是函数:http : //www.slimframework.com/docs/objects/router.html#container-resolution

我想你几乎理解了基本的想法。我建议多次阅读有关路由的章节。它涵盖了一切都很好。

快乐编码,如果您需要任何其他帮助,请告诉我!