13 * to license@zend.com so we can send you a copy immediately. |
13 * to license@zend.com so we can send you a copy immediately. |
14 * |
14 * |
15 * @category Zend |
15 * @category Zend |
16 * @package Zend_Controller |
16 * @package Zend_Controller |
17 * @subpackage Router |
17 * @subpackage Router |
18 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) |
18 * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) |
19 * @version $Id: Rewrite.php 23362 2010-11-18 17:22:41Z bittarman $ |
19 * @version $Id: Rewrite.php 24593 2012-01-05 20:35:02Z matthew $ |
20 * @license http://framework.zend.com/license/new-bsd New BSD License |
20 * @license http://framework.zend.com/license/new-bsd New BSD License |
21 */ |
21 */ |
22 |
22 |
23 /** Zend_Controller_Router_Abstract */ |
23 /** Zend_Controller_Router_Abstract */ |
24 require_once 'Zend/Controller/Router/Abstract.php'; |
24 require_once 'Zend/Controller/Router/Abstract.php'; |
29 /** |
29 /** |
30 * Ruby routing based Router. |
30 * Ruby routing based Router. |
31 * |
31 * |
32 * @package Zend_Controller |
32 * @package Zend_Controller |
33 * @subpackage Router |
33 * @subpackage Router |
34 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) |
34 * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) |
35 * @license http://framework.zend.com/license/new-bsd New BSD License |
35 * @license http://framework.zend.com/license/new-bsd New BSD License |
36 * @see http://manuals.rubyonrails.com/read/chapter/65 |
36 * @see http://manuals.rubyonrails.com/read/chapter/65 |
37 */ |
37 */ |
38 class Zend_Controller_Router_Rewrite extends Zend_Controller_Router_Abstract |
38 class Zend_Controller_Router_Rewrite extends Zend_Controller_Router_Abstract |
39 { |
39 { |
379 $this->addDefaultRoutes(); |
379 $this->addDefaultRoutes(); |
380 } |
380 } |
381 |
381 |
382 // Find the matching route |
382 // Find the matching route |
383 $routeMatched = false; |
383 $routeMatched = false; |
384 |
384 |
385 foreach (array_reverse($this->_routes, true) as $name => $route) { |
385 foreach (array_reverse($this->_routes, true) as $name => $route) { |
386 // TODO: Should be an interface method. Hack for 1.0 BC |
386 // TODO: Should be an interface method. Hack for 1.0 BC |
387 if (method_exists($route, 'isAbstract') && $route->isAbstract()) { |
387 if (method_exists($route, 'isAbstract') && $route->isAbstract()) { |
388 continue; |
388 continue; |
389 } |
389 } |
448 * @throws Zend_Controller_Router_Exception |
448 * @throws Zend_Controller_Router_Exception |
449 * @return string Resulting absolute URL path |
449 * @return string Resulting absolute URL path |
450 */ |
450 */ |
451 public function assemble($userParams, $name = null, $reset = false, $encode = true) |
451 public function assemble($userParams, $name = null, $reset = false, $encode = true) |
452 { |
452 { |
|
453 if (!is_array($userParams)) { |
|
454 require_once 'Zend/Controller/Router/Exception.php'; |
|
455 throw new Zend_Controller_Router_Exception('userParams must be an array'); |
|
456 } |
|
457 |
453 if ($name == null) { |
458 if ($name == null) { |
454 try { |
459 try { |
455 $name = $this->getCurrentRouteName(); |
460 $name = $this->getCurrentRouteName(); |
456 } catch (Zend_Controller_Router_Exception $e) { |
461 } catch (Zend_Controller_Router_Exception $e) { |
457 $name = 'default'; |
462 $name = 'default'; |
458 } |
463 } |
459 } |
464 } |
460 |
465 |
461 // Use UNION (+) in order to preserve numeric keys |
466 // Use UNION (+) in order to preserve numeric keys |
462 $params = $userParams + $this->_globalParams; |
467 $params = $userParams + $this->_globalParams; |
463 |
468 |
464 $route = $this->getRoute($name); |
469 $route = $this->getRoute($name); |
465 $url = $route->assemble($params, $reset, $encode); |
470 $url = $route->assemble($params, $reset, $encode); |
466 |
471 |
467 if (!preg_match('|^[a-z]+://|', $url)) { |
472 if (!preg_match('|^[a-z]+://|', $url)) { |
468 $url = rtrim($this->getFrontController()->getBaseUrl(), '/') . '/' . $url; |
473 $url = rtrim($this->getFrontController()->getBaseUrl(), self::URI_DELIMITER) . self::URI_DELIMITER . $url; |
469 } |
474 } |
470 |
475 |
471 return $url; |
476 return $url; |
472 } |
477 } |
473 |
478 |