/** * @param Nette\Application\Request * @return Nette\Application\IResponse */ public function run(Application\Request $request) { $this->request = $request; $httpRequest = $this->context->getByType('Nette\\Http\\IRequest'); if (!$httpRequest->isAjax() && ($request->isMethod('get') || $request->isMethod('head'))) { $refUrl = clone $httpRequest->getUrl(); $url = $this->context->router->constructUrl($request, $refUrl->setPath($refUrl->getScriptPath())); if ($url !== NULL && !$httpRequest->getUrl()->isEqual($url)) { return new Responses\RedirectResponse($url, Http\IResponse::S301_MOVED_PERMANENTLY); } } $params = $request->getParameters(); if (!isset($params['callback'])) { return; } $params['presenter'] = $this; $method = callback($params['callback'])->toReflection(); $response = $method->invokeArgs(Application\UI\PresenterComponentReflection::combineArgs($method, $params)); if (is_string($response)) { $response = array($response, array()); } if (is_array($response)) { if ($response[0] instanceof \SplFileInfo) { $response = $this->createTemplate('Nette\\Templating\\FileTemplate')->setParameters($response[1])->setFile($response[0]); } else { $response = $this->createTemplate('Nette\\Templating\\Template')->setParameters($response[1])->setSource($response[0]); } } if ($response instanceof Nette\Templating\ITemplate) { return new Responses\TextResponse($response); } else { return $response; } }
/** * Create new presenter instance. * @param string presenter name * @return IPresenter */ public function createPresenter($name) { $presenter = $this->context->createInstance($this->getPresenterClass($name)); if (method_exists($presenter, 'setContext')) { $this->context->callMethod(array($presenter, 'setContext')); } return $presenter; }
/** * Adds new services from list of definitions. Expands %param% and @service values. * Format: * serviceName => array( * class => 'ClassName' or factory => 'Factory::create' * arguments => array(...) * methods => array( * array(methodName, array(...)) * ... * ) * tags => array(...) * ) */ public function addDefinitions(IContainer $container, array $definitions) { foreach ($definitions as $name => $definition) { if (!is_array($definition)) { $definition = array('class' => $definition); } $arguments = isset($definition['arguments']) ? $definition['arguments'] : array(); $expander = function (&$val) use($container) { $val = $val[0] === '@' ? $container->getService(substr($val, 1)) : $container->expand($val); }; if (isset($definition['class'])) { $class = $definition['class']; $methods = isset($definition['methods']) ? $definition['methods'] : array(); $factory = function ($container) use($class, $arguments, $methods, $expander) { $class = $container->expand($class); if ($arguments) { array_walk_recursive($arguments, $expander); $service = Nette\Reflection\ClassType::from($class)->newInstanceArgs($arguments); } else { $service = new $class(); } array_walk_recursive($methods, $expander); foreach ($methods as $method) { call_user_func_array(array($service, $method[0]), isset($method[1]) ? $method[1] : array()); } return $service; }; } elseif (isset($definition['factory'])) { array_unshift($arguments, $definition['factory']); $factory = function ($container) use($arguments, $expander) { array_walk_recursive($arguments, $expander); $factory = $arguments[0]; $arguments[0] = $container; return call_user_func_array($factory, $arguments); }; } else { throw new Nette\InvalidStateException("The definition of service '{$name}' is missing factory method."); } if (isset($definition['tags'])) { $tags = (array) $definition['tags']; array_walk_recursive($tags, $expander); } else { $tags = NULL; } $container->addService($name, $factory, $tags); } }
/** * Sets authorization handler. * @param Nette\Security\IAuthorizator * @return User provides a fluent interface */ public function setAuthorizator(IAuthorizator $handler) { $this->context->removeService('authorizator'); $this->context->authorizator = $handler; return $this; }
/** * Gets the service object by name. * @param string * @return mixed. */ public final function getService($name) { return $this->context->getService($name); }
public static function create(\Nette\DI\IContainer $container) { return new self($container->getService('entityManager'), $container->getService('moduleManager'), $container->getService('eventManager')); }
/** * Returns current authorization handler. * @return IAuthorizator */ public final function getAuthorizator() { return $this->authorizator ?: $this->context->getByType('Nette\\Security\\IAuthorizator'); }
/** * @return Nette\Security\User */ public function getUser() { return $this->context->getByType('Nette\\Security\\User'); }