Skip to content

Commit 68eac66

Browse files
author
Hunter Skrasek
committed
Update UrlGenerator to fully extend Illuminates UrlGenerator.
References dingo#918. Closes dingo#919
1 parent 402680c commit 68eac66

File tree

3 files changed

+68
-5
lines changed

3 files changed

+68
-5
lines changed

src/Provider/RoutingServiceProvider.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,23 @@ protected function registerRouter()
5454
protected function registerUrlGenerator()
5555
{
5656
$this->app->singleton('api.url', function ($app) {
57-
$url = new UrlGenerator($app['request']);
57+
$routes = $app['router']->getRoutes();
58+
59+
$app->instance('routes', $routes);
60+
61+
$url = new UrlGenerator(
62+
$routes, $app->rebinding(
63+
'request', $this->requestRebinder()
64+
)
65+
);
66+
67+
$url->setSessionResolver(function () {
68+
return $this->app['session'];
69+
});
70+
71+
$app->rebinding('routes', function ($app, $routes) {
72+
$app['url']->setRoutes($routes);
73+
});
5874

5975
$url->setRouteCollections($app['Dingo\Api\Routing\Router']->getRoutes());
6076

src/Routing/UrlGenerator.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Dingo\Api\Routing;
44

55
use Illuminate\Http\Request;
6+
use Illuminate\Routing\RouteCollection as IlluminateRouteCollection;
67
use Illuminate\Routing\UrlGenerator as IlluminateUrlGenerator;
78

89
class UrlGenerator extends IlluminateUrlGenerator
@@ -17,13 +18,13 @@ class UrlGenerator extends IlluminateUrlGenerator
1718
/**
1819
* Create a new URL generator instance.
1920
*
20-
* @param \Dingo\Api\Http\Request $request
21+
* @param \Illuminate\Routing\RouteCollection $routes
22+
* @param \Dingo\Api\Http\Request|Request $request
2123
*
22-
* @return void
2324
*/
24-
public function __construct(Request $request)
25+
public function __construct(IlluminateRouteCollection $routes, Request $request)
2526
{
26-
$this->setRequest($request);
27+
parent::__construct($routes, $request);
2728
}
2829

2930
/**

tests/Routing/UrlGeneratorTest.php

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php namespace Dingo\Api\Tests\Routing;
2+
3+
use Dingo\Api\Http\Request;
4+
use Dingo\Api\Routing\Route;
5+
use Dingo\Api\Routing\RouteCollection;
6+
use Dingo\Api\Routing\UrlGenerator;
7+
use Dingo\Api\Tests\Stubs\RoutingAdapterStub;
8+
use Illuminate\Container\Container;
9+
use Illuminate\Routing\RouteCollection as IlluminateRouteCollection;
10+
use PHPUnit_Framework_TestCase;
11+
12+
class UrlGeneratorTest extends PHPUnit_Framework_TestCase
13+
{
14+
public function setUp()
15+
{
16+
$this->adapter = new RoutingAdapterStub;
17+
$this->container = new Container;
18+
}
19+
20+
public function testVersionRouteGeneration()
21+
{
22+
$url = new UrlGenerator($routes = new IlluminateRouteCollection, $request = Request::create('http://www.foo.com/'));
23+
24+
$versionedRoutes = new RouteCollection;
25+
$route = new Route(
26+
$this->adapter, $this->container, $request,
27+
new \Illuminate\Routing\Route(['GET',], '/users', ['as' => 'users'])
28+
);
29+
$versionedRoutes->add($route);
30+
$url->setRouteCollections(['v1' => $versionedRoutes]);
31+
32+
$this->assertSame('/users', $url->version('v1')->route('users', [], false));
33+
}
34+
35+
public function testNormalRouteGeneration()
36+
{
37+
$url = new UrlGenerator($routes = new IlluminateRouteCollection, $request = Request::create('http://www.foo.com/'));
38+
39+
$route = new \Illuminate\Routing\Route(['GET',], '/users', ['as' => 'users']);
40+
$routes->add($route);
41+
42+
$url->setRouteCollections(['v1' => new RouteCollection]);
43+
44+
$this->assertSame('/users', $url->route('users', [], false));
45+
}
46+
}

0 commit comments

Comments
 (0)