Skip to content

Commit

Permalink
Update UrlGenerator to fully extend Illuminates UrlGenerator.
Browse files Browse the repository at this point in the history
References #918. Closes #919
  • Loading branch information
Hunter Skrasek committed Aug 26, 2016
1 parent 402680c commit 68eac66
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 5 deletions.
18 changes: 17 additions & 1 deletion src/Provider/RoutingServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,23 @@ protected function registerRouter()
protected function registerUrlGenerator()
{
$this->app->singleton('api.url', function ($app) {
$url = new UrlGenerator($app['request']);
$routes = $app['router']->getRoutes();

$app->instance('routes', $routes);

$url = new UrlGenerator(
$routes, $app->rebinding(
'request', $this->requestRebinder()
)
);

$url->setSessionResolver(function () {
return $this->app['session'];
});

$app->rebinding('routes', function ($app, $routes) {
$app['url']->setRoutes($routes);
});

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

Expand Down
9 changes: 5 additions & 4 deletions src/Routing/UrlGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Dingo\Api\Routing;

use Illuminate\Http\Request;
use Illuminate\Routing\RouteCollection as IlluminateRouteCollection;
use Illuminate\Routing\UrlGenerator as IlluminateUrlGenerator;

class UrlGenerator extends IlluminateUrlGenerator
Expand All @@ -17,13 +18,13 @@ class UrlGenerator extends IlluminateUrlGenerator
/**
* Create a new URL generator instance.
*
* @param \Dingo\Api\Http\Request $request
* @param \Illuminate\Routing\RouteCollection $routes
* @param \Dingo\Api\Http\Request|Request $request
*
* @return void
*/
public function __construct(Request $request)
public function __construct(IlluminateRouteCollection $routes, Request $request)
{
$this->setRequest($request);
parent::__construct($routes, $request);
}

/**
Expand Down
46 changes: 46 additions & 0 deletions tests/Routing/UrlGeneratorTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php namespace Dingo\Api\Tests\Routing;

use Dingo\Api\Http\Request;
use Dingo\Api\Routing\Route;
use Dingo\Api\Routing\RouteCollection;
use Dingo\Api\Routing\UrlGenerator;
use Dingo\Api\Tests\Stubs\RoutingAdapterStub;
use Illuminate\Container\Container;
use Illuminate\Routing\RouteCollection as IlluminateRouteCollection;
use PHPUnit_Framework_TestCase;

class UrlGeneratorTest extends PHPUnit_Framework_TestCase
{
public function setUp()
{
$this->adapter = new RoutingAdapterStub;
$this->container = new Container;
}

public function testVersionRouteGeneration()
{
$url = new UrlGenerator($routes = new IlluminateRouteCollection, $request = Request::create('http://www.foo.com/'));

$versionedRoutes = new RouteCollection;
$route = new Route(
$this->adapter, $this->container, $request,
new \Illuminate\Routing\Route(['GET',], '/users', ['as' => 'users'])
);
$versionedRoutes->add($route);
$url->setRouteCollections(['v1' => $versionedRoutes]);

$this->assertSame('/users', $url->version('v1')->route('users', [], false));
}

public function testNormalRouteGeneration()
{
$url = new UrlGenerator($routes = new IlluminateRouteCollection, $request = Request::create('http://www.foo.com/'));

$route = new \Illuminate\Routing\Route(['GET',], '/users', ['as' => 'users']);
$routes->add($route);

$url->setRouteCollections(['v1' => new RouteCollection]);

$this->assertSame('/users', $url->route('users', [], false));
}
}

0 comments on commit 68eac66

Please sign in to comment.