示例#1
0
 /**
  * @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;
     }
 }
示例#2
0
 /**
  * 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;
 }
示例#3
0
 /**
  * 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);
     }
 }
示例#4
0
文件: User.php 项目: kovkus/r-cms
 /**
  * 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;
 }
示例#5
0
 /**
  * Gets the service object by name.
  * @param  string
  * @return mixed.
  */
 public final function getService($name)
 {
     return $this->context->getService($name);
 }
示例#6
0
文件: Acl.php 项目: bazo/Tatami
 public static function create(\Nette\DI\IContainer $container)
 {
     return new self($container->getService('entityManager'), $container->getService('moduleManager'), $container->getService('eventManager'));
 }
示例#7
0
文件: User.php 项目: kravco/nette
 /**
  * Returns current authorization handler.
  * @return IAuthorizator
  */
 public final function getAuthorizator()
 {
     return $this->authorizator ?: $this->context->getByType('Nette\\Security\\IAuthorizator');
 }
示例#8
0
 /**
  * @return Nette\Security\User
  */
 public function getUser()
 {
     return $this->context->getByType('Nette\\Security\\User');
 }