/** * @return IPresenter */ public function factory() { $modulePath = []; foreach ($this->request->getModulePath() as $module) { $modulePath[] = StringUtils::camelize($module) . 'Module'; } return $this->context->create(sprintf('%s\\%sPresenter', implode('\\', $modulePath), StringUtils::camelize($this->request->getPresenter()))); }
public function run() { $reflectionClass = new \ReflectionClass($this); if ($reflectionClass->hasMethod($method = 'action' . StringUtils::camelize($this->request->getAction()))) { $parameterList = $this->request->getParameterList(); $methodReflection = $reflectionClass->getMethod($method); $argumentList = []; foreach ($methodReflection->getParameters() as $parameterRefleciton) { if (!isset($parameterList[$parameterRefleciton->getName()])) { if ($parameterRefleciton->isOptional()) { continue; } throw new \Exception('not implemented yet: define invalid request exception'); } $argumentList[] = $parameterList[$parameterRefleciton->getName()]; } $methodReflection->invokeArgs($this, $argumentList); } }
/** * $request is target application request which will be matched * * @param IRequest $request * * @return null|string */ public function build(IRequest $request) { return sprintf('%s/%s/%s/%s', $request->getHttpRequest()->getUrl()->getAuthority(), implode(':', $request->getModulePath()), $request->getPresenter(), $request->getAction()); }