Beispiel #1
0
 public function assemble($data = array(), $reset = false, $encode = false)
 {
     $return = parent::assemble($data, $reset, $encode);
     if ($this->_representationParam !== null) {
         if ($return && isset($data[$this->_representationParam])) {
             $return .= '.' . $data[$this->_representationParam];
         }
     }
     return $return;
 }
Beispiel #2
0
 /**
  * Assembles user submitted parameters forming a URL path defined by this route
  *
  * @param  array $ An array of variable and value pairs used as parameters
  * @param  boolean $reset Whether or not to set route defaults with those provided in $data
  * @return string Route path with user submitted parameters
  */
 public function assemble($data = array(), $reset = false, $encode = false, $partial = false)
 {
     // TODO: We should take the paramValues/mvcParams into account shouldn't we? For now
     // This router doesn't support full reverse assembly I guess.
     return parent::assemble($data, $reset, $encode, $partial);
 }
Beispiel #3
0
 public function testEscapedSpecialCharsWithTranslation()
 {
     $route = new Zend_Controller_Router_Route('::foo/@@bar/:@myvar');
     $path = $route->assemble(array('myvar' => 'foo'));
     $this->assertEquals($path, ':foo/@bar/en_foo');
     $values = $route->match(':foo/@bar/en_foo');
     $this->assertEquals($values['myvar'], 'foo');
 }
Beispiel #4
0
    public function testAssembleWithRemovedDefaults() // Test for ZF-1197
    {    
        $route = new Zend_Controller_Router_Route(':controller/:action/*', array('controller' => 'index', 'action' => 'index'));
        
        $url = $route->assemble(array('id' => 3));
        $this->assertSame('index/index/id/3', $url);

        $url = $route->assemble(array('action' => 'test'));
        $this->assertSame('index/test', $url);

        $url = $route->assemble(array('action' => 'test', 'id' => 3));
        $this->assertSame('index/test/id/3', $url);

        $url = $route->assemble(array('controller' => 'test'));
        $this->assertSame('test', $url);

        $url = $route->assemble(array('controller' => 'test', 'action' => 'test'));
        $this->assertSame('test/test', $url);

        $url = $route->assemble(array('controller' => 'test', 'id' => 3));
        $this->assertSame('test/index/id/3', $url);

        $url = $route->assemble(array());
        $this->assertSame('', $url);

        $route->match('ctrl');

        $url = $route->assemble(array('id' => 3));
        $this->assertSame('ctrl/index/id/3', $url);

        $url = $route->assemble(array('action' => 'test'));
        $this->assertSame('ctrl/test', $url);

        $url = $route->assemble();
        $this->assertSame('ctrl', $url);
        
        $route->match('index');
        
        $url = $route->assemble();
        $this->assertSame('', $url);
    }
Beispiel #5
0
 /**
  * Assembles user submitted parameters forming a URL path defined by this route
  *
  * We cannot generate http://subdomain.domain.com/ due to the fact
  * that the url helper adds the baseUrl in front of it... *sigh*
  * 
  * @todo figure out a workaround
  * 
  * @param  array $data An array of variable and value pairs used as parameters
  * @param  boolean $reset Whether or not to set route defaults with those provided in $data
  * @return string Route path with user submitted parameters
  */
 public function assemble($data = array(), $reset = false)
 {
     return parent::assemble($data, $reset);
 }
Beispiel #6
0
 public function testAssembleWithVariableMissing()
 {
     $route = new Zend_Controller_Router_Route('archive/:year', array('controller' => 'archive', 'action' => 'show'), array('year' => '\\d+'));
     try {
         $url = $route->assemble();
     } catch (Exception $e) {
     }
     $this->assertTrue($e instanceof Zend_Controller_Router_Exception, 'Expected Zend_Controller_Router_Exception to be thrown');
 }
Beispiel #7
0
 public function testAssembleWithUrlVariablesReuse()
 {
     $route = new Zend_Controller_Router_Route('archives/:year/:month');
     $values = $route->match('archives/2006/07');
     $this->assertType('array', $values);
     $url = $route->assemble(array('month' => '03'));
     $this->assertSame('archives/2006/03', $url);
 }
Beispiel #8
0
 public function testAssembleWithDefaultAndValue()
 {
     $route = new Zend_Controller_Router_Route('authors/:name', array('name' => 'martel'));
     $url = $route->assemble(array('name' => 'mike'));
     $this->assertEquals('authors/mike', $url);
 }
Beispiel #9
0
 /**
  * Assembles user submitted parameters forming a URL path defined by this route
  *
  * @param  array $data An array of variable and value pairs used as parameters
  * @param  boolean $reset Whether or not to set route defaults with those provided in $data
  * @return string Route path with user submitted parameters
  */
 public function assemble($data = array(), $reset = false, $encode = false, $partial = false)
 {
     if (!isset($data['locale'])) {
         return parent::assemble($data, $reset, $encode, $partial);
     }
     $locale = $data['locale'];
     unset($data['locale']);
     $assemble = parent::assemble($data, $reset, $encode);
     if (in_array($locale, self::$_locales)) {
         if (isset($this->_defaults['locale'])) {
             $defaultLocale = $this->_defaults['locale'];
         } else {
             $defaultLocale = self::$_defaultLocale;
         }
         if ($locale != $defaultLocale) {
             $assemble = implode($this->_urlDelimiter, array($locale, $assemble));
         }
     }
     return $assemble;
 }
Beispiel #10
0
    public function testEncode()
    {
        $route = new Zend_Controller_Router_Route(':controller/:action/*', array('controller' => 'index', 'action' => 'index'));
        
        $url = $route->assemble(array('controller' => 'My Controller'), false, true);
        $this->assertEquals('My+Controller', $url);

        $url = $route->assemble(array('controller' => 'My Controller'), false, false);
        $this->assertEquals('My Controller', $url);

        $token = $route->match('en/foo/id/My Value');
    
        $url = $route->assemble(array(), false, true);
        $this->assertEquals('en/foo/id/My+Value', $url);
        
        $url = $route->assemble(array('id' => 'My Other Value'), false, true);
        $this->assertEquals('en/foo/id/My+Other+Value', $url);
        
        $route = new Zend_Controller_Router_Route(':controller/*', array('controller' => 'My Controller'));
        $url = $route->assemble(array('id' => 1), false, true);
        $this->assertEquals('My+Controller/id/1', $url);
    }
Beispiel #11
0
 public function testAssembleResetDefaults()
 {
     $route = new Zend_Controller_Router_Route(':controller/:action/*', array('controller' => 'index', 'action' => 'index'));
     $values = $route->match('news/view/id/3');
     $url = $route->assemble(array('action' => null));
     $this->assertSame('news/index/id/3', $url);
     $url = $route->assemble(array('action' => null, 'id' => null));
     $this->assertSame('news/index', $url);
 }
Beispiel #12
0
 /**
  * Assembles user submitted parameters forming a URL path defined by this route
  *
  * @param  array $data An array of variable and value pairs used as parameters
  * @param  boolean $reset Whether or not to set route defaults with those provided in $data
  * @return string Route path with user submitted parameters
  */
 public function assemble($data = array(), $reset = false, $encode = false, $partial = false)
 {
     $locale = null;
     if (!empty($data['locale'])) {
         // This locale is always valid. It's a developer filtered input
         $locale = trim($data['locale'], '/ ');
     } else {
         $locale = trim(Axis_Locale::getLanguageUrl(), '/ ');
     }
     unset($data['locale']);
     $assemble = parent::assemble($data, $reset, $encode, $partial);
     if (empty($locale)) {
         return $assemble;
     }
     $isValidLocale = false;
     foreach (self::$_locales as $_locale) {
         if (strpos($_locale, $locale) === 0) {
             $isValidLocale = true;
             break;
         }
     }
     if ($isValidLocale) {
         if (isset($this->_defaults['locale'])) {
             $defaultLocale = $this->_defaults['locale'];
         } else {
             $defaultLocale = self::$_defaultLocale;
         }
         if ($locale != $defaultLocale) {
             if (empty($assemble)) {
                 // preventing urlDelimiter at the end of the url for the homepage
                 $assemble = $locale;
             } else {
                 $assemble = implode($this->_urlDelimiter, array($locale, $assemble));
             }
         }
     }
     return $assemble;
 }
Beispiel #13
0
 /**
  * Builds the query part of the URL
  */
 protected function _buildQuery()
 {
     $event = new Erfurt_Event('onBuildUrl');
     $event->base = $this->_base;
     $event->route = $this->_route;
     $event->controller = $this->_controller;
     $event->action = $this->_action;
     $event->params = $this->_params;
     $urlCreated = $event->trigger();
     if ($event->handled()) {
         if ($urlCreated && isset($event->url)) {
             return $event->url;
         } else {
             $this->_params = $event->params;
             $this->_controller = $event->controller;
             $this->_action = $event->action;
             $this->_route = $event->route;
         }
     }
     // check params
     foreach ($this->_params as $name => $value) {
         if (is_string($value) && preg_match('/\\//', $value)) {
             $this->_useSefUrls = false;
         }
     }
     $url = '';
     if ($this->_route) {
         // checking if reset of route-defaults necessary
         // fixes pager usage fails on versioning pages
         if (count($this->_route->getDefaults()) == 0) {
             $resetRoute = false;
         } else {
             $resetRoute = true;
         }
         if ($this->_useSefUrls) {
             // let the route assemble the whole URL
             $url = $this->_route->assemble($this->_params, $resetRoute, true);
         } else {
             // we will assign parameters ourselves
             $url = $this->_route->assemble(array(), $resetRoute);
             $url = sprintf('%s/%s', $url, '?' . http_build_query($this->_params, '&'));
         }
     } else {
         if ($this->_useSefUrls) {
             $query = '';
             $lastKey = '';
             foreach ($this->_params as $key => $value) {
                 if (is_scalar($value)) {
                     $value = urlencode($value);
                     $query .= "{$key}/{$value}/";
                     $lastKey = $key;
                 }
             }
             // remove trailing slash
             $query = rtrim($query, '/');
         } else {
             $query = '?' . http_build_query($this->_params, '&');
         }
         $parts = array_filter(array($this->_controller, $this->_action, $query));
         $url = implode('/', $parts);
     }
     // HACK:
     $this->_useSefUrls = true;
     return $this->_base . ltrim($url, '/');
 }