fix for router and edit links, added tests, closes #3108

git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@5592 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
gwoo 2007-08-28 21:16:24 +00:00
parent 37ff270d04
commit 7793b4f5c0
2 changed files with 72 additions and 14 deletions

View file

@ -643,7 +643,7 @@ class Router extends Object {
$path = end($_this->__paths);
}
}
$base = $_this->stripPlugin($path['base'], $params['plugin']);
$base = $path['base']; // dont need this anymore $_this->stripPlugin($path['base'], $params['plugin']);
$extension = $output = $mapped = $q = $frag = null;
if (is_array($url) && !empty($url)) {
@ -667,7 +667,7 @@ class Router extends Object {
}
}
if ($admin) {
if (!isset($url[$admin]) && isset($params[$admin])) {
if (!isset($url[$admin]) && !empty($params[$admin])) {
$url[$admin] = true;
} elseif ($admin && array_key_exists($admin, $url) && !$url[$admin]) {
unset($url[$admin]);
@ -719,10 +719,15 @@ class Router extends Object {
if (empty($named) && empty($args) && (!isset($url['action']) || $url['action'] == 'index')) {
$url['action'] = null;
}
$urlOut = Set::filter(array($url['plugin'], $url['controller'], $url['action']));
if ($url['plugin'] == $url['controller']) {
array_shift($urlOut);
$urlOut = Set::filter(array($url['controller'], $url['action']));
if($admin && isset($url['admin'])) {
array_unshift($urlOut, $admin);
}
if (isset($url['plugin']) && $url['plugin'] != $url['controller']) {
array_unshift($urlOut, $url['plugin']);
}
$output = join('/', $urlOut) . '/';
}

View file

@ -183,10 +183,9 @@ class RouterTest extends UnitTestCase {
Configure::write('Routing.admin', 'admin');
$this->router->reload();
$this->router->connect('/admin/subscriptions/:action/*', array('controller' => 'subscribe', 'admin' => true, 'prefix' => 'admin'));
$this->router->setRequestInfo(array(
array(
'pass' => array(), 'action' => 'admin_index', 'plugin' => null, 'controller' => 'subscribe',
'pass' => array(), 'action' => 'admin_index', 'plugin' => null, 'controller' => 'subscriptions',
'admin' => true, 'url' => array('url' => 'admin/subscriptions/index/page:2'), 'bare' => 0, 'webservices' => ''
),
array(
@ -201,6 +200,26 @@ class RouterTest extends UnitTestCase {
$expected = '/magazine/admin/subscriptions/index/page:3';
$this->assertEqual($result, $expected);
Configure::write('Routing.admin', 'admin');
$this->router->reload();
//$this->router->connect('/admin/subscriptions/edit/*', array('controller' => 'subscriptions', 'admin' => true, 'prefix' => 'admin'));
$this->router->setRequestInfo(array(
array(
'pass' => array(), 'action' => 'admin_index', 'plugin' => null, 'controller' => 'subscriptions',
'admin' => true, 'url' => array('url' => 'admin/subscriptions/edit/1'), 'bare' => 0, 'webservices' => ''
),
array(
'base' => '/magazine', 'here' => '/magazine/admin/subscriptions/edit/1',
'webroot' => '/magazine/', 'passedArgs' => array('page' => 2), 'namedArgs' => array('page' => 2),
'webservices' => null
)
));
$this->router->parse('/');
$result = $this->router->url(array('action'=>'edit', 'id'=> 1));
$expected = '/magazine/admin/subscriptions/edit/1';
$this->assertEqual($result, $expected);
$this->router->reload();
$this->router->setRequestInfo(array(
array(
@ -370,6 +389,7 @@ class RouterTest extends UnitTestCase {
$this->assertEqual($result, $expected);
$this->router->reload();
//Configure::write('Routing.admin', false);
$this->router->setRequestInfo(array(
array(
@ -660,6 +680,39 @@ class RouterTest extends UnitTestCase {
$expected = array('admin');
$this->assertEqual($result, $expected);
}
function testGenerateUrl() {
Configure::write('Routing.admin', 'admin');
// ADD (Passes)
$this->router->reload();
$this->router->setRequestInfo(array(
array ( 'plugin' => NULL, 'controller' => 'pages', 'action' => 'admin_add', 'pass' => array ( ), 'prefix' => 'admin', 'admin' => true, 'form' => array ( ), 'url' => array ( 'url' => 'admin/pages/add', ), 'bare' => 0, 'webservices' => NULL, ),
array ( 'plugin' => NULL, 'controller' => NULL, 'action' => NULL, 'base' => '', 'here' => '/admin/pages/add', 'webroot' => '/', )
));
$this->router->parse('/');
$result = $this->router->url(array ( 'plugin' => NULL, 'controller' => 'pages', 'action' => 'add', 'id' => false, ));
$expected = '/admin/pages/add';
$this->assertEqual($result, $expected);
// EDIT (Fails)
$this->router->reload();
$this->router->setRequestInfo(array(
array ( 'plugin' => NULL, 'controller' => 'pages', 'action' => 'admin_edit', 'pass' => array ( 0 => '284', ), 'prefix' => 'admin', 'admin' => true, 'form' => array ( ), 'url' => array ( 'url' => 'admin/pages/edit/284', ), 'bare' => 0, 'webservices' => NULL, ),
array ( 'plugin' => NULL, 'controller' => NULL, 'action' => NULL, 'base' => '', 'here' => '/admin/pages/edit/284', 'webroot' => '/', )
));
$this->router->parse('/');
$result = $this->router->url(array ( 'plugin' => NULL, 'controller' => 'pages', 'action' => 'edit', 'id' => '284'));
$expected = '/admin/pages/edit/284';
$this->assertEqual($result, $expected);
}
}
?>