精简框架——将代码分割成多个文件,而不是index.php


Slim Framework - splitting code into multiple files other than index.php

在Slim Framework的文档中,它说

在这个示例应用程序中,所有的路由都在index.php中,但是在这样做会使文件变得相当冗长和笨拙!它很好重构你的应用程序,把路由放到一个不同的文件或文件,或者只是注册一组带有回调函数的路由

它没有说如何实际做到这一点。我唯一的想法是,你可以将代码分割成多个PHP文件,然后使用includerequireindex.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

我认为你基本理解对了。我建议阅读几次关于路由的章节。它涵盖了所有内容。

快乐编码,让我知道,如果你需要任何其他帮助!