我如何在 Slim Framework 3 上创建中间件?
How can i create middleware on Slim Framework 3?
我阅读了关于创建中间件的文档here。但是我必须创建哪个文件夹或文件呢?文档不包含此信息。
在 src 文件夹下我有 middleware.php
.
例如我想得到 post 这样的信息:
$app->post('/search/{keywords}', function ($request, $response, $args) {
$data = $request->getParsedBody();
//Here is some codes connecting db etc...
return json_encode($query_response);
});
我在 routes.php 下做了这个,但我想为此创建 class 或中间件。我能怎么做?我必须使用哪个文件夹或文件。
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');
}
}
此外,return json 的最佳方法是使用 return $response->withJson($toReturn)
我阅读了关于创建中间件的文档here。但是我必须创建哪个文件夹或文件呢?文档不包含此信息。
在 src 文件夹下我有 middleware.php
.
例如我想得到 post 这样的信息:
$app->post('/search/{keywords}', function ($request, $response, $args) {
$data = $request->getParsedBody();
//Here is some codes connecting db etc...
return json_encode($query_response);
});
我在 routes.php 下做了这个,但我想为此创建 class 或中间件。我能怎么做?我必须使用哪个文件夹或文件。
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');
}
}
此外,return json 的最佳方法是使用 return $response->withJson($toReturn)