超薄4无需$app即可将所有路由放入控制器 [英] Slim 4 get all routes into a controller without $app
本文介绍了超薄4无需$app即可将所有路由放入控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要将所有要使用的注册路由放入控制器中。 在SILM 3中,可以使用
获取路由器$router = $container->get('router');
$routes = $router->getRoutes();
使用$app很容易$routes = $app->getRouteCollector()->getRoutes();
有什么想法吗?
推荐答案
如果使用php-DI,可以添加容器定义并通过构造函数注入对象。
示例:
<?php
// config/container.php
use SlimApp;
use SlimFactoryAppFactory;
use SlimInterfacesRouteCollectorInterface;
// ...
return [
App::class => function (ContainerInterface $container) {
AppFactory::setContainer($container);
return AppFactory::create();
},
RouteCollectorInterface::class => function (ContainerInterface $container) {
return $container->get(App::class)->getRouteCollector();
},
// ...
];
操作类:
<?php
namespace AppActionHome;
use PsrHttpMessageResponseInterface;
use SlimHttpResponse;
use SlimHttpServerRequest;
use SlimInterfacesRouteCollectorInterface;
final class HomeAction
{
/**
* @var RouteCollectorInterface
*/
private $routeCollector;
public function __construct(RouteCollectorInterface $routeCollector)
{
$this->routeCollector = $routeCollector;
}
public function __invoke(ServerRequest $request, Response $response): ResponseInterface
{
$routes = $this->routeCollector->getRoutes();
// ...
}
}
这篇关于超薄4无需$app即可将所有路由放入控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文