# \[Slim 4\] Get router in controller

**URL:** <https://discourse.slimframework.com/t/slim-4-get-router-in-controller/3126>\
**Category:** Questions\
**Created:** [April 28, 2019, 3:11pm UTC](https://discourse.slimframework.com/t/slim-4-get-router-in-controller/3126 "2019-04-28T15:11:41Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![leodeville](https://avatars.discourse-cdn.com/v4/letter/l/ebca7d/32.png) [@leodeville](https://discourse.slimframework.com/u/leodeville)\
**Post date:** [April 28, 2019, 3:11pm UTC](https://discourse.slimframework.com/t/slim-4-get-router-in-controller/3126/1 "2019-04-28T15:11:41Z")

</div>

Before (in Slim 3), to get a route from a Controller you could do:  
`$container->router->pathFor('route')`

But how do we do it now?

---

<div class="post-metadata">

**Author:** ![l0gicgate](https://avatars.discourse-cdn.com/v4/letter/l/41988e/32.png) [@l0gicgate](https://discourse.slimframework.com/u/l0gicgate)\
**Post date:** [April 28, 2019, 6:15pm UTC](https://discourse.slimframework.com/t/slim-4-get-router-in-controller/3126/2 "2019-04-28T18:15:45Z")

</div>

You need to obtain the `RouteParser` from the `RouteCollector`

```php
$app = AppFactory::create();

$routeParser = $app->getRouteCollector()->getRouteParser();

// pathFor() has been replaced by urlFor()
$routeParser->urlFor(...);

```

---

<div class="post-metadata">

**Author:** ![leodeville](https://avatars.discourse-cdn.com/v4/letter/l/ebca7d/32.png) [@leodeville](https://discourse.slimframework.com/u/leodeville)\
**Post date:** [April 28, 2019, 6:25pm UTC](https://discourse.slimframework.com/t/slim-4-get-router-in-controller/3126/3 "2019-04-28T18:25:07Z")

</div>

Oh, yes, indeed. Thank you 🙂

---

<div class="post-metadata">

**Author:** ![dubaksk](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.slimframework.com/dubaksk/32/1265_2.png) [@dubaksk](https://discourse.slimframework.com/u/dubaksk)\
**Post date:** [December 24, 2020, 9:21pm UTC](https://discourse.slimframework.com/t/slim-4-get-router-in-controller/3126/4 "2020-12-24T21:21:25Z")

</div>

@l0gicgate but if I have code structure taken from [github](https://github.com/odan/slim4-skeleton) and my action looks like:

```auto
    /**
     * Action.
     *
     * @param ServerRequestInterface $request The request
     * @param ResponseInterface $response The response
     *
     * @return ResponseInterface The response
     */
    public function __invoke(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface
    {
       // ... I would like to call $routeParser->urlFor(...); here
    }

```

could you suggest me what should I do?

---

<div class="post-metadata">

**Author:** ![l0gicgate](https://avatars.discourse-cdn.com/v4/letter/l/41988e/32.png) [@l0gicgate](https://discourse.slimframework.com/u/l0gicgate)\
**Post date:** [December 24, 2020, 9:57pm UTC](https://discourse.slimframework.com/t/slim-4-get-router-in-controller/3126/5 "2020-12-24T21:57:52Z")

</div>

Use the route context object.

```auto
<?php
user Slim\Routing\RouteContext;

$app->get('/', function ($request, $response) {
    $routeContext = RouteContext::fromRequest($request);
    $routeParser = $routeContext->getRouteParser();
    $relativeUrl = $routeParser->relativeUrlFor('homepage');
    $url = $routeParser->urlFor('homepage');
    $fullUrl = $routeParser->fullUrlFor('homepage');
});

```

> <https://github.com/slimphp/Slim/blob/4.x/Slim/Routing/RouteParser.php>

---

<div class="post-metadata">

**Author:** ![dubaksk](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.slimframework.com/dubaksk/32/1265_2.png) [@dubaksk](https://discourse.slimframework.com/u/dubaksk)\
**Post date:** [December 27, 2020, 9:04pm UTC](https://discourse.slimframework.com/t/slim-4-get-router-in-controller/3126/6 "2020-12-27T21:04:25Z")

</div>

@l0gicgate thanks, this is what I was doing so far, I was just wondering if there is any other better approach.
