超薄4无需$app即可将所有路由放入控制器 [英] Slim 4 get all routes into a controller without $app

查看:21
本文介绍了超薄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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆