-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathParameterRouter.php
More file actions
39 lines (33 loc) · 1.09 KB
/
ParameterRouter.php
File metadata and controls
39 lines (33 loc) · 1.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
namespace DesignPatterns\Creational\FactoryMethod\ParameterApplication;
use DesignPatterns\Creational\FactoryMethod\RequestInterface;
use DesignPatterns\Creational\FactoryMethod\RouterInterface;
/**
* It corresponds to `ConcreteProduct` in the Factory Method pattern.
*
* @author Vlad Riabchenko <contact@vria.eu>
*/
class ParameterRouter implements RouterInterface
{
/**
* @param RequestInterface $request
* @return callable
* @throws \Exception
*/
public function resolveHandler(RequestInterface $request)
{
if (!$request instanceof ParameterRequest) {
throw new \InvalidArgumentException;
}
if ('/user' === $request->getPath() && $request->getQueryParameter('id')) {
return [ParameterController::class, 'userAction'];
}
if ('/articles' === $request->getPath()
&& $request->getQueryParameter('category')
&& $request->getQueryParameter('filter')
) {
return [ParameterController::class, 'articlesAction'];
}
throw new \Exception("404");
}
}