namedConfig() public static method

Gets the current named parameter configuration values.
See also: Router::$_namedConfig
public static namedConfig ( ) : array
return array
Example #1
0
/**
 * Converts a matching route array into a url string. Composes the string url using the template
 * used to create the route.
 *
 * @param array $params The params to convert to a string url.
 * @return string Composed route string.
 */
	protected function _writeUrl($params) {
		if (isset($params['prefix'])) {
			$prefixed = $params['prefix'] . '_';
		}
		if (isset($prefixed, $params['action']) && strpos($params['action'], $prefixed) === 0) {
			$params['action'] = substr($params['action'], strlen($prefixed) * -1);
			unset($params['prefix']);
		}

		if (is_array($params['pass'])) {
			$params['pass'] = implode('/', array_map('rawurlencode', $params['pass']));
		}

		$namedConfig = Router::namedConfig();
		$separator = $namedConfig['separator'];

		if (!empty($params['named']) && is_array($params['named'])) {
			$named = array();
			foreach ($params['named'] as $key => $value) {
				if (is_array($value)) {
					$flat = Hash::flatten($value, '][');
					foreach ($flat as $namedKey => $namedValue) {
						$named[] = $key . "[$namedKey]" . $separator . rawurlencode($namedValue);
					}
				} else {
					$named[] = $key . $separator . rawurlencode($value);
				}
			}
			$params['pass'] = $params['pass'] . '/' . implode('/', $named);
		}
		$out = $this->template;

		$search = $replace = array();
		foreach ($this->keys as $key) {
			$string = null;
			if (isset($params[$key])) {
				$string = $params[$key];
			} elseif (strpos($out, $key) != strlen($out) - strlen($key)) {
				$key .= '/';
			}
			$search[] = ':' . $key;
			$replace[] = $string;
		}
		$out = str_replace($search, $replace, $out);

		if (strpos($this->template, '*')) {
			$out = str_replace('*', $params['pass'], $out);
		}
		$out = str_replace('//', '/', $out);
		return $out;
	}
Example #2
0
    App::uses('PluginShortRoute', 'Routing/Route');
    foreach ($plugins as $key => $value) {
        $plugins[$key] = Inflector::underscore($value);
    }
    $pluginPattern = implode('|', $plugins);
    $match = array('plugin' => $pluginPattern, 'defaultRoute' => true);
    $shortParams = array('routeClass' => 'PluginShortRoute', 'plugin' => $pluginPattern, 'defaultRoute' => true);
    foreach ($prefixes as $prefix) {
        $params = array('prefix' => $prefix, $prefix => true);
        $indexParams = $params + array('action' => 'index');
        Router::connect("/{$prefix}/:plugin", $indexParams, $shortParams);
        Router::connect("/{$prefix}/:plugin/:controller", $indexParams, $match);
        Router::connect("/{$prefix}/:plugin/:controller/:action/*", $params, $match);
    }
    Router::connect('/:plugin', array('action' => 'index'), $shortParams);
    Router::connect('/:plugin/:controller', array('action' => 'index'), $match);
    Router::connect('/:plugin/:controller/:action/*', array(), $match);
}
foreach ($prefixes as $prefix) {
    $params = array('prefix' => $prefix, $prefix => true);
    $indexParams = $params + array('action' => 'index');
    Router::connect("/{$prefix}/:controller", $indexParams, array('defaultRoute' => true));
    Router::connect("/{$prefix}/:controller/:action/*", $params, array('defaultRoute' => true));
}
Router::connect('/:controller', array('action' => 'index'), array('defaultRoute' => true));
Router::connect('/:controller/:action/*', array(), array('defaultRoute' => true));
$namedConfig = Router::namedConfig();
if ($namedConfig['rules'] === false) {
    Router::connectNamed(true);
}
unset($namedConfig, $params, $indexParams, $prefix, $prefixes, $shortParams, $match, $pluginPattern, $plugins, $key, $value);
Example #3
0
 /**
  * testNamedArgsUrlParsing method
  *
  * @return void
  */
 public function testNamedArgsUrlParsing()
 {
     Router::reload();
     require CAKE . 'Config' . DS . 'routes.php';
     $result = Router::parse('/controller/action/param1:value1:1/param2:value2:3/param:value');
     $expected = array('pass' => array(), 'named' => array('param1' => 'value1:1', 'param2' => 'value2:3', 'param' => 'value'), 'controller' => 'controller', 'action' => 'action', 'plugin' => null);
     $this->assertEquals($expected, $result);
     Router::reload();
     require CAKE . 'Config' . DS . 'routes.php';
     $result = Router::connectNamed(false);
     $this->assertEquals(array_keys($result['rules']), array());
     $this->assertFalse($result['greedyNamed']);
     $result = Router::parse('/controller/action/param1:value1:1/param2:value2:3/param:value');
     $expected = array('pass' => array('param1:value1:1', 'param2:value2:3', 'param:value'), 'named' => array(), 'controller' => 'controller', 'action' => 'action', 'plugin' => null);
     $this->assertEquals($expected, $result);
     Router::reload();
     require CAKE . 'Config' . DS . 'routes.php';
     $result = Router::connectNamed(true);
     $named = Router::namedConfig();
     $this->assertEquals(array_keys($result['rules']), $named['default']);
     $this->assertTrue($result['greedyNamed']);
     Router::reload();
     require CAKE . 'Config' . DS . 'routes.php';
     Router::connectNamed(array('param1' => 'not-matching'));
     $result = Router::parse('/controller/action/param1:value1:1/param2:value2:3/param:value');
     $expected = array('pass' => array('param1:value1:1'), 'named' => array('param2' => 'value2:3', 'param' => 'value'), 'controller' => 'controller', 'action' => 'action', 'plugin' => null);
     $this->assertEquals($expected, $result);
     $result = Router::parse('/foo/view/param1:value1:1/param2:value2:3/param:value');
     $expected = array('pass' => array('param1:value1:1'), 'named' => array('param2' => 'value2:3', 'param' => 'value'), 'controller' => 'foo', 'action' => 'view', 'plugin' => null);
     $this->assertEquals($expected, $result);
     Router::reload();
     require CAKE . 'Config' . DS . 'routes.php';
     Router::connectNamed(array('param1' => '[\\d]', 'param2' => '[a-z]', 'param3' => '[\\d]'));
     $result = Router::parse('/controller/action/param1:1/param2:2/param3:3');
     $expected = array('pass' => array('param2:2'), 'named' => array('param1' => '1', 'param3' => '3'), 'controller' => 'controller', 'action' => 'action', 'plugin' => null);
     $this->assertEquals($expected, $result);
     Router::reload();
     require CAKE . 'Config' . DS . 'routes.php';
     Router::connectNamed(array('param1' => '[\\d]', 'param2' => true, 'param3' => '[\\d]'));
     $result = Router::parse('/controller/action/param1:1/param2:2/param3:3');
     $expected = array('pass' => array(), 'named' => array('param1' => '1', 'param2' => '2', 'param3' => '3'), 'controller' => 'controller', 'action' => 'action', 'plugin' => null);
     $this->assertEquals($expected, $result);
     Router::reload();
     require CAKE . 'Config' . DS . 'routes.php';
     Router::connectNamed(array('param1' => 'value[\\d]+:[\\d]+'), array('greedy' => false));
     $result = Router::parse('/controller/action/param1:value1:1/param2:value2:3/param3:value');
     $expected = array('pass' => array('param2:value2:3', 'param3:value'), 'named' => array('param1' => 'value1:1'), 'controller' => 'controller', 'action' => 'action', 'plugin' => null);
     $this->assertEquals($expected, $result);
 }
Example #4
0
 /**
  * testNamedArgsUrlParsing method
  *
  * @access public
  * @return void
  */
 function testNamedArgsUrlParsing()
 {
     Router::reload();
     $result = Router::parse('/controller/action/param1:value1:1/param2:value2:3/param:value');
     $expected = array('pass' => array(), 'named' => array('param1' => 'value1:1', 'param2' => 'value2:3', 'param' => 'value'), 'controller' => 'controller', 'action' => 'action', 'plugin' => null);
     $this->assertEqual($result, $expected);
     Router::reload();
     $result = Router::connectNamed(false);
     $this->assertEqual(array_keys($result['rules']), array());
     $this->assertFalse($result['greedyNamed']);
     $result = Router::parse('/controller/action/param1:value1:1/param2:value2:3/param:value');
     $expected = array('pass' => array('param1:value1:1', 'param2:value2:3', 'param:value'), 'named' => array(), 'controller' => 'controller', 'action' => 'action', 'plugin' => null);
     $this->assertEqual($result, $expected);
     Router::reload();
     $result = Router::connectNamed(true);
     $named = Router::namedConfig();
     $this->assertEqual(array_keys($result['rules']), $named['default']);
     $this->assertTrue($result['greedyNamed']);
     Router::reload();
     Router::connectNamed(array('param1' => 'not-matching'));
     $result = Router::parse('/controller/action/param1:value1:1/param2:value2:3/param:value');
     $expected = array('pass' => array('param1:value1:1'), 'named' => array('param2' => 'value2:3', 'param' => 'value'), 'controller' => 'controller', 'action' => 'action', 'plugin' => null);
     $this->assertEqual($result, $expected);
     //@todo delete this test.
     Router::reload();
     Router::connect('/foo/:action/*', array('controller' => 'bar'), array('named' => array('param1' => array('action' => 'index')), 'greedyNamed' => true));
     $result = Router::parse('/foo/index/param1:value1:1/param2:value2:3/param:value');
     $expected = array('pass' => array(), 'named' => array('param1' => 'value1:1', 'param2' => 'value2:3', 'param' => 'value'), 'controller' => 'bar', 'action' => 'index', 'plugin' => null);
     $this->assertEqual($result, $expected);
     $result = Router::parse('/foo/view/param1:value1:1/param2:value2:3/param:value');
     $expected = array('pass' => array('param1:value1:1'), 'named' => array('param2' => 'value2:3', 'param' => 'value'), 'controller' => 'bar', 'action' => 'view', 'plugin' => null);
     $this->assertEqual($result, $expected);
     Router::reload();
     Router::connectNamed(array('param1' => '[\\d]', 'param2' => '[a-z]', 'param3' => '[\\d]'));
     $result = Router::parse('/controller/action/param1:1/param2:2/param3:3');
     $expected = array('pass' => array('param2:2'), 'named' => array('param1' => '1', 'param3' => '3'), 'controller' => 'controller', 'action' => 'action', 'plugin' => null);
     $this->assertEqual($result, $expected);
     Router::reload();
     Router::connectNamed(array('param1' => '[\\d]', 'param2' => true, 'param3' => '[\\d]'));
     $result = Router::parse('/controller/action/param1:1/param2:2/param3:3');
     $expected = array('pass' => array(), 'named' => array('param1' => '1', 'param2' => '2', 'param3' => '3'), 'controller' => 'controller', 'action' => 'action', 'plugin' => null);
     $this->assertEqual($result, $expected);
     Router::reload();
     Router::connectNamed(array('param1' => 'value[\\d]+:[\\d]+'), array('greedy' => false));
     $result = Router::parse('/controller/action/param1:value1:1/param2:value2:3/param3:value');
     $expected = array('pass' => array('param2:value2:3', 'param3:value'), 'named' => array('param1' => 'value1:1'), 'controller' => 'controller', 'action' => 'action', 'plugin' => null);
     $this->assertEqual($result, $expected);
     //@todo delete this test.
     Router::reload();
     Router::connect('/foo/*', array('controller' => 'bar', 'action' => 'fubar'), array('named' => array('param1' => 'value[\\d]:[\\d]')));
     Router::connectNamed(array(), array('greedy' => false));
     $result = Router::parse('/foo/param1:value1:1/param2:value2:3/param3:value');
     $expected = array('pass' => array('param2:value2:3', 'param3:value'), 'named' => array('param1' => 'value1:1'), 'controller' => 'bar', 'action' => 'fubar', 'plugin' => null);
     $this->assertEqual($result, $expected);
 }