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

时间:2016-10-06 08:21:11

标签: php slim

在Slim Framework的documentation上,它说

  

在此示例应用程序中,所有路由都在index.php中但在   练习这可以制作一个相当长而且笨重的文件!没关系   重构您的应用程序以将路由放入不同的文件或   文件,或只是注册一组回调的路由   实际上在别处宣布。

虽然没有说明如何实际做到这一点。我唯一的想法是你可以将代码分成多个PHP文件,然后使用include中的requireindex.php来引用这些文件。

我也不确定“注册一组实际在其他地方宣布的回调的路线”是什么意思

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

2 个答案:

答案 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)

Slim documentation

中有一些想法

您可以使用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

我认为你几乎可以得到正确的基本想法。我建议阅读有关路由的章节几次。它涵盖了一切都很好。

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