Тонкий скелет на самом деле демонстрирует пример того, чего вам нужно достичь. После создания экземпляра приложения в индексе. php, существует следующее назначение:
// Instantiate the app
AppFactory::setContainer($container);
$app = AppFactory::create();
$callableResolver = $app->getCallableResolver();
Вы можете сделать то же самое:
$routeParser = $app->getRouteCollector()->getRouteParser();
И если вам действительно нужно, чтобы этот экземпляр RouteParser был доступен внутри каждого обратного вызова маршрута, вы можете поместить его в контейнер зависимостей, например, так:
$container->set(Slim\Interfaces\RouteParserInterface::class, $routeParser);
Затем вы можете использовать функцию автоматического подключения PHP -DI для вставьте этот RouteParser в конструктор контроллера:
use Slim\Interfaces\RouteParserInterface;
class SampleController {
public function __construct(RouteParserInterface $routeParser) {
$this->routeParser = $routeParser;
//...
}
}
или если вам нужно вызвать $container->get()
внутри любого из ваших обратных вызовов маршрута:
$app->get('/', function (Request $request, Response $response) {
$routeParser = $this->get(Slim\Interfaces\RouteParserInterface::class);
$response->getBody()->write('Hello world! ' . $routeParser->urlFor('something'));
return $response;
});