/** * Create an URL based on an router alias * * @param string $alias * @param array $params * @param bool $retain Should we keep the get parameters? * @return string */ public static function alias($alias, $params = array(), $retain = false) { $route_params = array(); // to handle the suffix after a slash in an alias define $suffix = ''; if (strpos($alias, '/') !== false && $alias !== '/') { // slashes in aliases get appended as suffix list($alias, $suffix) = explode('/', $alias); $suffix = '/' . $suffix; } // get the parameters with the numeric keys so we can // pass them as route parameters like [any]-[num]-[num]/[any]/ foreach ($params as $key => $value) { if (is_int($key)) { $route_params[] = $value; unset($params[$key]); } } return CCUrl::to(CCRouter::alias($alias, $route_params) . $suffix, $params, $retain); }
/** * Test CCRouter alias */ public function test_alias() { CCRouter::on('phpunit/test-alias1', array('alias' => 'phpunit.case.1'), function () { echo "Tests are Awesome!"; }); // check the alias $this->assertEquals(CCRouter::alias('phpunit.case.1'), 'phpunit/test-alias1'); // not existing $this->assertFalse(CCRouter::alias('phpunit.case.notexisting')); // set manually CCRouter::alias('phpunit.case.2', 'go/to/this/uri'); // check the alias $this->assertEquals(CCRouter::alias('phpunit.case.2'), 'go/to/this/uri'); // dynamics CCRouter::on('phpunit/test2-[num]-alias-[any]', array('alias' => 'phpunit.case.3'), function ($num) { echo "Tests are Awesome!"; }); // check the alias $this->assertEquals(CCRouter::alias('phpunit.case.3'), 'phpunit/test2-[num]-alias-[any]'); // parameterize $this->assertEquals(CCRouter::alias('phpunit.case.3', array(21, 'woo')), 'phpunit/test2-21-alias-woo'); // alternate alias definition CCRouter::on(array('aliasshortcut@alicut' => function () { echo 'foobar'; })); $this->assertEquals('aliasshortcut', CCRouter::alias('alicut')); }