コード例 #1
0
 public function testTranslatorIsPassedThroughAssembleMethod()
 {
     $translator = new Translator();
     $uri = new HttpUri();
     $route = $this->getMock('Zend\\Mvc\\Router\\Http\\RouteInterface');
     $route->expects($this->once())->method('assemble')->with($this->equalTo(array()), $this->equalTo(array('translator' => $translator, 'text_domain' => 'default', 'uri' => $uri)));
     $stack = new TranslatorAwareTreeRouteStack();
     $stack->addRoute('test', $route);
     $stack->assemble(array(), array('name' => 'test', 'translator' => $translator, 'uri' => $uri));
 }
コード例 #2
0
 /**
  * assemble(): defined by \Zend\Mvc\Router\RouteInterface interface.
  *
  * @see    \Zend\Mvc\Router\RouteInterface::assemble()
  * @param  array $params
  * @param  array $options
  * @return mixed
  * @throws Exception\InvalidArgumentException
  * @throws Exception\RuntimeException
  */
 public function assemble(array $params = array(), array $options = array())
 {
     // Assuming, this stack can only orrur on top level
     // TODO is there any way to ensure that this is called only for top level?
     // get translator
     $translator = null;
     if (isset($options['translator'])) {
         $translator = $options['translator'];
     } elseif ($this->hasTranslator() && $this->isTranslatorEnabled()) {
         $translator = $this->getTranslator();
     }
     /* @var $skelletonOptions SkelletonOptions */
     $skelletonOptions = $this->getRoutePluginManager()->getServiceLocator()->get(SkelletonOptions::class);
     $languages = $skelletonOptions->getLanguages();
     $oldBase = $this->baseUrl;
     // save old baseUrl
     // only add language key when more than one language is supported
     if (count($languages) > 1) {
         if (isset($params['locale'])) {
             // use parameter if provided
             $locale = $params['locale'];
             $key = array_search($locale, $languages);
             // get key for locale
         } elseif (is_callable(array($translator, 'getLocale'))) {
             // use getLocale if possible
             $locale = $translator->getLocale();
             $key = array_search($locale, $languages);
             // get key for locale
         }
         if (!empty($key)) {
             $this->setBaseUrl($oldBase . '/' . $key);
             // add key to baseUrl
         }
     }
     $res = parent::assemble($params, $options);
     $this->setBaseUrl($oldBase);
     // restore baseUrl
     return $res;
 }
コード例 #3
0
 public function testAssembleRouteWithParameterLocale()
 {
     $stack = new TranslatorAwareTreeRouteStack();
     $stack->setTranslator($this->translator, 'route');
     $stack->addRoute('foo', $this->fooRoute);
     $this->assertEquals('/de/hauptseite', $stack->assemble(array('locale' => 'de'), array('name' => 'foo/index')));
     $this->assertEquals('/en/homepage', $stack->assemble(array('locale' => 'en'), array('name' => 'foo/index')));
 }