/** * @param Presenter $presenter */ private function injectByMethods(Presenter $presenter) { if (class_exists(InjectExtension::class)) { /** @noinspection PhpInternalEntityUsedInspection */ $methods = InjectExtension::getInjectMethods($presenter); // Nette 2.3+ } else { $methods = []; foreach (get_class_methods($presenter) as $method) { if (substr($method, 0, 6) === 'inject') { $methods[] = $method; } } } unset($methods['injectPrimary']); foreach (array_reverse($methods) as $method) { $injectName = lcfirst(substr($method, 6)); if (isset($this->dependencies[$injectName])) { if (!is_array($this->dependencies[$injectName])) { $this->dependencies[$injectName] = [$this->dependencies[$injectName]]; } call_user_func_array([$presenter, $method], $this->dependencies[$injectName]); } } }
private function initialiseSchema() { $input = new ArrayInput(array('--force' => true)); $output = new StringOutput(); InjectExtension::callInjects($this->context, $this->schemaUpdateCommand); $this->schemaUpdateCommand->setHelperSet(new HelperSet(['em' => new EntityManagerHelper($this->em)])); $this->schemaUpdateCommand->run($input, $output); $this->messages[] = $output->getOutput(); }
/** * Calls all methods starting with with "inject" using autowiring. * @param object * @return void */ public function callInjects($service) { Extensions\InjectExtension::callInjects($this, $service); }
private function doInjects(Presenter $presenter) { $properties = InjectExtension::getInjectProperties(get_class($presenter)); foreach ($properties as $property => $type) { if (isset($this->dependencies['@' . $property])) { $presenter->{$property} = $this->dependencies['@' . $property]; } elseif (isset($this->dependencies[$property])) { $presenter->{$property} = $this->dependencies[$property]; } } $methods = InjectExtension::getInjectMethods($presenter); unset($methods['injectPrimary']); foreach (array_reverse($methods) as $method) { $injectName = lcfirst(substr($method, 6)); if (isset($this->dependencies[$injectName])) { if (!is_array($this->dependencies[$injectName])) { $this->dependencies[$injectName] = [$this->dependencies[$injectName]]; } call_user_func_array($presenter->{$method}, $this->dependencies[$injectName]); } } }