Skip to content
This repository was archived by the owner on Jan 29, 2020. It is now read-only.

Commit e2da306

Browse files
committed
Have Application compose a RouteCollector instead of PathBasedRoutingMiddleware
This is a change proposed while updating the documentation for version 3. Having two routing middleware is confusing, particularly since the `PathBasedRoutingMiddleware` simply provides methods for modifying the state of the the composed router. zend-expressive-router 3.0.0rc5 updates to rename `PathBasedRoutingMiddleware` to `Zend\Expressive\Router\RouteCollector`, and to no longer extend `RouteMiddleware`. This allows it to do its one job: create and return `Route` instances that are also injected into the composed router. This patch updates to that version, and modifies `Application` to compose a `RouteCollector` instead of `PathBasedRoutingMiddleware`.
1 parent 889eadd commit e2da306

File tree

9 files changed

+38
-113
lines changed

9 files changed

+38
-113
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"psr/container": "^1.0",
2828
"psr/http-message": "^1.0.1",
2929
"psr/http-server-middleware": "^1.0",
30-
"zendframework/zend-expressive-router": "^3.0.0rc4",
30+
"zendframework/zend-expressive-router": "^3.0.0rc5",
3131
"zendframework/zend-expressive-template": "^2.0.0alpha1",
3232
"zendframework/zend-httphandlerrunner": "^1.0.1",
3333
"zendframework/zend-stratigility": "^3.0.0rc1"

composer.lock

Lines changed: 10 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Application.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
use Psr\Http\Message\ServerRequestInterface;
1414
use Psr\Http\Server\MiddlewareInterface;
1515
use Psr\Http\Server\RequestHandlerInterface;
16-
use Zend\Expressive\Router\Middleware\PathBasedRoutingMiddleware;
16+
use Zend\Expressive\Router\RouteCollector;
1717
use Zend\HttpHandlerRunner\RequestHandlerRunner;
1818
use Zend\Stratigility\MiddlewarePipeInterface;
1919

@@ -32,7 +32,7 @@ class Application implements MiddlewareInterface, RequestHandlerInterface
3232
private $pipeline;
3333

3434
/**
35-
* @var PathBasedRoutingMiddleware
35+
* @var RouteCollector
3636
*/
3737
private $routes;
3838

@@ -44,7 +44,7 @@ class Application implements MiddlewareInterface, RequestHandlerInterface
4444
public function __construct(
4545
MiddlewareFactory $factory,
4646
MiddlewarePipeInterface $pipeline,
47-
PathBasedRoutingMiddleware $routes,
47+
RouteCollector $routes,
4848
RequestHandlerRunner $runner
4949
) {
5050
$this->factory = $factory;

src/ConfigProvider.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public function getDependencies() : array
4040
IMPLICIT_HEAD_MIDDLEWARE => Router\Middleware\ImplicitHeadMiddleware::class,
4141
IMPLICIT_OPTIONS_MIDDLEWARE => Router\Middleware\ImplicitOptionsMiddleware::class,
4242
NOT_FOUND_MIDDLEWARE => Handler\NotFoundHandler::class,
43-
ROUTE_MIDDLEWARE => Router\Middleware\PathBasedRoutingMiddleware::class,
43+
ROUTE_MIDDLEWARE => Router\Middleware\RouteMiddleware::class,
4444
],
4545
'factories' => [
4646
Application::class => Container\ApplicationFactory::class,

src/Container/ApplicationFactory.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
use Zend\Expressive\Application;
1414
use Zend\Expressive\ApplicationPipeline;
1515
use Zend\Expressive\MiddlewareFactory;
16-
use Zend\Expressive\Router\Middleware\PathBasedRoutingMiddleware;
16+
use Zend\Expressive\Router\RouteCollector;
1717
use Zend\HttpHandlerRunner\RequestHandlerRunner;
1818

1919
/**
@@ -25,7 +25,7 @@
2525
* - Zend\Expressive\MiddlewareFactory.
2626
* - Zend\Expressive\ApplicationPipeline, which should resolve to a
2727
* Zend\Stratigility\MiddlewarePipeInterface instance.
28-
* - Zend\Expressive\Router\Middleware\PathBasedRoutingMiddleware.
28+
* - Zend\Expressive\Router\RouteCollector.
2929
* - Zend\HttpHandler\RequestHandlerRunner.
3030
*/
3131
class ApplicationFactory
@@ -35,7 +35,7 @@ public function __invoke(ContainerInterface $container) : Application
3535
return new Application(
3636
$container->get(MiddlewareFactory::class),
3737
$container->get(ApplicationPipeline::class),
38-
$container->get(PathBasedRoutingMiddleware::class),
38+
$container->get(RouteCollector::class),
3939
$container->get(RequestHandlerRunner::class)
4040
);
4141
}

test/ApplicationTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
use TypeError;
2020
use Zend\Expressive\Application;
2121
use Zend\Expressive\MiddlewareFactory;
22-
use Zend\Expressive\Router\Middleware\PathBasedRoutingMiddleware as RouteMiddleware;
2322
use Zend\Expressive\Router\Route;
23+
use Zend\Expressive\Router\RouteCollector;
2424
use Zend\HttpHandlerRunner\RequestHandlerRunner;
2525
use Zend\Stratigility\Middleware\PathMiddlewareDecorator;
2626
use Zend\Stratigility\MiddlewarePipe;
@@ -32,7 +32,7 @@ public function setUp()
3232
{
3333
$this->factory = $this->prophesize(MiddlewareFactory::class);
3434
$this->pipeline = $this->prophesize(MiddlewarePipeInterface::class);
35-
$this->routes = $this->prophesize(RouteMiddleware::class);
35+
$this->routes = $this->prophesize(RouteCollector::class);
3636
$this->runner = $this->prophesize(RequestHandlerRunner::class);
3737

3838
$this->app = new Application(
@@ -333,7 +333,7 @@ public function testAnyMethodPassesNullForMethodWhenAllArgumentsPresent($middlew
333333
$this->assertSame($route, $this->app->any('/foo', $middleware, 'foo'));
334334
}
335335

336-
public function testGetRoutesProxiesToRouteMiddleware()
336+
public function testGetRoutesProxiesToRouteCollector()
337337
{
338338
$route = $this->prophesize(Route::class)->reveal();
339339
$this->routes->getRoutes()->willReturn([$route]);

test/Container/ApplicationConfigInjectionDelegatorTest.php

Lines changed: 9 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@
2525
use Zend\Expressive\MiddlewareFactory;
2626
use Zend\Expressive\Router\Middleware\DispatchMiddleware;
2727
use Zend\Expressive\Router\Middleware\MethodNotAllowedMiddleware;
28-
use Zend\Expressive\Router\Middleware\PathBasedRoutingMiddleware;
28+
use Zend\Expressive\Router\Middleware\RouteMiddleware;
2929
use Zend\Expressive\Router\Route;
30+
use Zend\Expressive\Router\RouteCollector;
3031
use Zend\Expressive\Router\RouterInterface;
3132
use Zend\HttpHandlerRunner\RequestHandlerRunner;
3233
use Zend\Stratigility\MiddlewarePipe;
@@ -46,7 +47,10 @@ class ApplicationConfigInjectionDelegatorTest extends TestCase
4647
/** @var MethodNotAllowedMiddleware|ObjectProphecy */
4748
private $methodNotAllowedMiddleware;
4849

49-
/** @var PathBasedRoutingMiddleware */
50+
/** @var RouteCollector */
51+
private $routeCollector;
52+
53+
/** @var RouteMiddleware */
5054
private $routeMiddleware;
5155

5256
/** @var RouterInterface|ObjectProphecy */
@@ -56,10 +60,8 @@ public function setUp()
5660
{
5761
$this->container = $this->mockContainerInterface();
5862
$this->router = $this->prophesize(RouterInterface::class);
59-
$this->routeMiddleware = new PathBasedRoutingMiddleware(
60-
$this->router->reveal(),
61-
new Response()
62-
);
63+
$this->routeCollector = new RouteCollector($this->router->reveal());
64+
$this->routeMiddleware = new RouteMiddleware($this->router->reveal());
6365
$this->dispatchMiddleware = $this->prophesize(DispatchMiddleware::class)->reveal();
6466
$this->methodNotAllowedMiddleware = $this->prophesize(MethodNotAllowedMiddleware::class)->reveal();
6567
}
@@ -73,7 +75,7 @@ public function createApplication()
7375
return new Application(
7476
$factory,
7577
$pipeline,
76-
$this->routeMiddleware,
78+
$this->routeCollector,
7779
$runner
7880
);
7981
}
@@ -139,63 +141,6 @@ public static function assertPipelineContainsInstanceOf($class, $pipeline, $mess
139141
Assert::assertThat($found, Assert::isTrue(), $message);
140142
}
141143

142-
public static function assertRouteMiddleware(MiddlewareInterface $middleware)
143-
{
144-
if ($middleware instanceof PathBasedRoutingMiddleware) {
145-
Assert::assertInstanceOf(PathBasedRoutingMiddleware::class, $middleware);
146-
return;
147-
}
148-
149-
if (! $middleware instanceof Middleware\LazyLoadingMiddleware) {
150-
Assert::fail('Middleware is not an instance of PathBasedRoutingMiddleware');
151-
}
152-
153-
Assert::assertAttributeSame(
154-
PathBasedRoutingMiddleware::class,
155-
'middlewareName',
156-
$middleware,
157-
'Middleware is not an instance of PathBasedRoutingMiddleware'
158-
);
159-
}
160-
161-
public static function assertDispatchMiddleware(MiddlewareInterface $middleware)
162-
{
163-
if ($middleware instanceof DispatchMiddleware) {
164-
Assert::assertInstanceOf(DispatchMiddleware::class, $middleware);
165-
return;
166-
}
167-
168-
if (! $middleware instanceof Middleware\LazyLoadingMiddleware) {
169-
Assert::fail('Middleware is not an instance of DispatchMiddleware');
170-
}
171-
172-
Assert::assertAttributeSame(
173-
DispatchMiddleware::class,
174-
'middlewareName',
175-
$middleware,
176-
'Middleware is not an instance of DispatchMiddleware'
177-
);
178-
}
179-
180-
public static function assertMethodNotAllowedMiddleware(MiddlewareInterface $middleware)
181-
{
182-
if ($middleware instanceof MethodNotAllowedMiddleware) {
183-
Assert::assertInstanceOf(MethodNotAllowedMiddleware::class, $middleware);
184-
return;
185-
}
186-
187-
if (! $middleware instanceof Middleware\LazyLoadingMiddleware) {
188-
Assert::fail('Middleware is not an instance of MethodNotAllowedMiddleware');
189-
}
190-
191-
Assert::assertAttributeSame(
192-
MethodNotAllowedMiddleware::class,
193-
'middlewareName',
194-
$middleware,
195-
'Middleware is not an instance of MethodNotAllowedMiddleware'
196-
);
197-
}
198-
199144
public function callableMiddlewares()
200145
{
201146
return [
@@ -416,16 +361,6 @@ public function testInjectRoutesFromConfigWillSkipSpecsThatOmitPath()
416361
],
417362
];
418363
$this->container->has('config')->willReturn(false);
419-
$this->injectServiceInContainer(
420-
$this->container,
421-
PathBasedRoutingMiddleware::class,
422-
$this->routeMiddleware
423-
);
424-
$this->injectServiceInContainer(
425-
$this->container,
426-
DispatchMiddleware::class,
427-
$this->dispatchMiddleware
428-
);
429364

430365
$app = $this->createApplication();
431366

@@ -447,16 +382,6 @@ public function testInjectRoutesFromConfigWillSkipSpecsThatOmitMiddleware()
447382
],
448383
];
449384
$this->container->has('config')->willReturn(false);
450-
$this->injectServiceInContainer(
451-
$this->container,
452-
PathBasedRoutingMiddleware::class,
453-
$this->routeMiddleware
454-
);
455-
$this->injectServiceInContainer(
456-
$this->container,
457-
DispatchMiddleware::class,
458-
$this->dispatchMiddleware
459-
);
460385

461386
$app = $this->createApplication();
462387

test/Container/ApplicationFactoryTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
use Zend\Expressive\ApplicationPipeline;
1616
use Zend\Expressive\Container\ApplicationFactory;
1717
use Zend\Expressive\MiddlewareFactory;
18-
use Zend\Expressive\Router\Middleware\PathBasedRoutingMiddleware;
18+
use Zend\Expressive\Router\RouteCollector;
1919
use Zend\HttpHandlerRunner\RequestHandlerRunner;
2020
use Zend\Stratigility\MiddlewarePipeInterface;
2121

@@ -25,13 +25,13 @@ public function testFactoryProducesAnApplication()
2525
{
2626
$middlewareFactory = $this->prophesize(MiddlewareFactory::class)->reveal();
2727
$pipeline = $this->prophesize(MiddlewarePipeInterface::class)->reveal();
28-
$routeMiddleware = $this->prophesize(PathBasedRoutingMiddleware::class)->reveal();
28+
$routeCollector = $this->prophesize(RouteCollector::class)->reveal();
2929
$runner = $this->prophesize(RequestHandlerRunner::class)->reveal();
3030

3131
$container = $this->prophesize(ContainerInterface::class);
3232
$container->get(MiddlewareFactory::class)->willReturn($middlewareFactory);
3333
$container->get(ApplicationPipeline::class)->willReturn($pipeline);
34-
$container->get(PathBasedRoutingMiddleware::class)->willReturn($routeMiddleware);
34+
$container->get(RouteCollector::class)->willReturn($routeCollector);
3535
$container->get(RequestHandlerRunner::class)->willReturn($runner);
3636

3737
$factory = new ApplicationFactory();
@@ -41,7 +41,7 @@ public function testFactoryProducesAnApplication()
4141
$this->assertInstanceOf(Application::class, $application);
4242
$this->assertAttributeSame($middlewareFactory, 'factory', $application);
4343
$this->assertAttributeSame($pipeline, 'pipeline', $application);
44-
$this->assertAttributeSame($routeMiddleware, 'routes', $application);
44+
$this->assertAttributeSame($routeCollector, 'routes', $application);
4545
$this->assertAttributeSame($runner, 'runner', $application);
4646
}
4747
}

test/Router/IntegrationTest.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
use Zend\Expressive\Router\Middleware\ImplicitHeadMiddleware;
2929
use Zend\Expressive\Router\Middleware\ImplicitOptionsMiddleware;
3030
use Zend\Expressive\Router\Middleware\MethodNotAllowedMiddleware;
31-
use Zend\Expressive\Router\Middleware\PathBasedRoutingMiddleware as RouteMiddleware;
31+
use Zend\Expressive\Router\Middleware\RouteMiddleware;
32+
use Zend\Expressive\Router\RouteCollector;
3233
use Zend\Expressive\Router\RouterInterface;
3334
use Zend\Expressive\Router\ZendRouter;
3435
use Zend\HttpHandlerRunner\RequestHandlerRunner;
@@ -71,12 +72,12 @@ public function createApplicationFromRouter(RouterInterface $router)
7172
$container = new MiddlewareContainer($this->container->reveal());
7273
$factory = new MiddlewareFactory($container);
7374
$pipeline = new MiddlewarePipe();
74-
$routeMiddleware = new RouteMiddleware($router);
75+
$collector = new RouteCollector($router);
7576
$runner = $this->prophesize(RequestHandlerRunner::class)->reveal();
7677
return new Application(
7778
$factory,
7879
$pipeline,
79-
$routeMiddleware,
80+
$collector,
8081
$runner
8182
);
8283
}

0 commit comments

Comments
 (0)