1 | <?php |
||
22 | class ParamConverterListener |
||
23 | { |
||
24 | private $paramConverters; |
||
25 | |||
26 | /** |
||
27 | * @param ParamConverter[] $paramConverters |
||
28 | */ |
||
29 | 8 | public function __construct(array $paramConverters = array()) |
|
33 | |||
34 | /** |
||
35 | * @param ParamConverter $paramConverter |
||
36 | */ |
||
37 | 8 | public function addParamConverter(ParamConverter $paramConverter) |
|
41 | |||
42 | /** |
||
43 | * @param FilterControllerEvent $event |
||
44 | */ |
||
45 | 8 | public function onKernelController(FilterControllerEvent $event) |
|
46 | { |
||
47 | 8 | $controller = $event->getController(); |
|
48 | 8 | $request = $event->getRequest(); |
|
49 | |||
50 | 8 | if (is_array($controller)) { |
|
51 | 2 | $reflection = new \ReflectionMethod($controller[0], $controller[1]); |
|
52 | 8 | } elseif (is_string($controller)) { |
|
53 | 2 | $reflection = new \ReflectionFunction($controller); |
|
54 | 2 | } else { |
|
55 | // use __invoke |
||
56 | 4 | $objReflector = new \ReflectionObject($controller); |
|
57 | 4 | $reflection = $objReflector->getMethod('__invoke'); |
|
58 | } |
||
59 | |||
60 | 8 | foreach ($reflection->getParameters() as $param) { |
|
61 | 8 | if (!$param->getClass() || $param->getClass()->isInstance($request)) { |
|
62 | 8 | continue; |
|
63 | } |
||
64 | |||
65 | 8 | $this->apply($request, $param); |
|
66 | 8 | } |
|
67 | 8 | } |
|
68 | |||
69 | /** |
||
70 | * @param Request $request |
||
71 | * @param \ReflectionParameter $param |
||
72 | */ |
||
73 | 8 | private function apply(Request $request, \ReflectionParameter $param) |
|
87 | } |
||
88 |