|
9 | 9 | use Mathematicator\Search\Query; |
10 | 10 | use Mathematicator\SearchController\IController; |
11 | 11 | use Nette\DI\Container; |
| 12 | +use Nette\DI\Extensions\InjectExtension; |
12 | 13 | use Tracy\Debugger; |
13 | 14 |
|
14 | 15 | final class Engine |
@@ -76,25 +77,31 @@ public function compute(string $query): EngineResult |
76 | 77 |
|
77 | 78 | /** |
78 | 79 | * @param Query $query |
79 | | - * @param string $controller |
| 80 | + * @param string $serviceName |
80 | 81 | * @return IController|null |
81 | 82 | * @throws InvalidDataException |
82 | 83 | */ |
83 | | - private function processCallback(Query $query, string $controller): ?IController |
| 84 | + private function processCallback(Query $query, string $serviceName): ?IController |
84 | 85 | { |
85 | | - /** @var IController|null $return */ |
86 | | - $return = $this->serviceFactory->getByType($controller); |
| 86 | + /** @var IController|null $controller */ |
| 87 | + $controller = $this->serviceFactory->getByType($serviceName); |
87 | 88 |
|
88 | | - if ($return !== null) { |
89 | | - $return->createContext($query); |
| 89 | + if ($controller !== null) { |
| 90 | + // 1. Process magic services |
| 91 | + foreach (InjectExtension::getInjectProperties(\get_class($controller)) as $property => $service) { |
| 92 | + $controller->{$property} = $this->serviceFactory->getByType($service); |
| 93 | + } |
| 94 | + |
| 95 | + // 2. Create context |
| 96 | + $controller->createContext($query); |
90 | 97 |
|
91 | 98 | try { |
92 | | - $return->actionDefault(); |
| 99 | + $controller->actionDefault(); |
93 | 100 | } catch (TerminateException $e) { |
94 | 101 | } |
95 | 102 | } |
96 | 103 |
|
97 | | - return $return ?? null; |
| 104 | + return $controller ?? null; |
98 | 105 | } |
99 | 106 |
|
100 | 107 | /** |
|
0 commit comments