如何在Slim Framework 3上创建中间件?

时间:2017-02-01 13:30:15

标签: php slim slim-3

我阅读了有关创建中间件的文档here。但我必须创建哪个文件夹或文件?文档不包含此信息。

在src文件夹下我有to_tsvector(title)

例如,我想获得这样的帖子信息:

middleware.php

我在 routes.php 下创建了这个,但我想为此创建类或中间件。我能怎么做?我必须使用哪个文件夹或文件。

1 个答案:

答案 0 :(得分:1)

Slim3不会将您绑定到特定的文件夹结构,但它确实(相反)假设您使用composer并使用其中一个PSR文件夹结构。

就个人而言,这就是我使用的(嗯,简化版):

在我的索引文件/www/index.php中:

include_once '../vendor/autoload.php';

$app = new \My\Slim\Application(include '../DI/services.php', '../config/slim-routes.php');
$app->run();

在/src/My/Slim/Application.php中:

class Application extends \Slim\App
{
    function __construct($container, $routePath)
    {
        parent::__construct($container);

        include $routePath;
        $this->add(new ExampleMiddleWareToBeUsedGlobally());

    }
}

我在DI / services.php中定义了所有依赖注入,并在config / slim-routes.php中定义了所有路由定义。请注意,由于我在Application构造函数中包含了路由,因此它们将引用$ this引用包含文件中的应用程序。

然后在DI / services.php中你可以得到像

这样的东西
$container = new \Slim\Container();
$container['HomeController'] = function ($container) {
    return new \My\Slim\Controller\HomeController();
};
return $container;

在config / slim-routes.php中,如

$this->get('/', 'HomeController:showHome'); //note the use of $this here, it refers to the Application class as stated above

最后你的控制器/src/My/Slim/Controller/HomeController.php

class HomeController extends \My\Slim\Controller\AbstractController
{
    function showHome(ServerRequestInterface $request, ResponseInterface $response)
    {
        return $response->getBody()->write('hello world');
    }
}

此外,返回json的最佳方法是使用return $response->withJson($toReturn)