Skip to content

Commit da5f369

Browse files
committed
update
1 parent 8847fe1 commit da5f369

2 files changed

Lines changed: 11 additions & 22 deletions

File tree

src/Router.php

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -145,15 +145,15 @@ protected static function routeFile($templateRoot,$root,$dir,$path,$parameters,$
145145

146146
if (substr($url,-7)=='//index') $redirect = substr($url,0,-7);
147147
if (substr(static::$original,-6)=='/index') $redirect = substr($url,0,-6);
148-
if (count($parameters)>count($parameterNames)) {
148+
if (count($parameters)>count($parameterNames) || count(array_diff(array_keys($getParameters),$parameterNames))>0) {
149149
if (substr($url,-6)=='/index') $url = substr($url,0,-6);
150150
if ($url=='index') $url = '';
151-
if (count($parameterNames)) {
152-
$redirect = ($url?$url.'/':'');
153-
$redirect .= implode('/',array_slice($parameters, 0, count($parameterNames)));
154-
} else {
155-
$redirect = $url;
151+
$redirect = $url;
152+
for ($i=0;$i<min(count($parameters),count($parameterNames));$i++) {
153+
$redirect .= '/'.$parameters[$i];
156154
}
155+
$query = http_build_query(array_intersect_key($getParameters,array_flip($parameterNames)));
156+
$redirect .= $query?'?'.$query:'';
157157
}
158158
$parameters = array_map('urldecode', $parameters);
159159
if (count($parameters)<count($parameterNames)) {
@@ -244,11 +244,6 @@ protected static function route()
244244
parse_str($query,$getParameters);
245245
}
246246

247-
if (!static::$allowGet) {
248-
$_SERVER['REQUEST_URI'] = static::$baseUrl.$request;
249-
$_GET = array();
250-
}
251-
252247
$parts = explode('/',$request);
253248
for ($i=count($parts);$i>=0;$i--) {
254249
if ($i==0) $dir = '';
@@ -268,7 +263,7 @@ protected static function route()
268263
$templateFile = static::$template;
269264
$parameters = array();
270265
$parameters['url'] = static::$parameters;
271-
$parameters['get'] = $getParameters;
266+
$parameters['get'] = $_GET;
272267
$parameters['post'] = $_POST;
273268
Debugger::set('router',compact('method','csrfOk','request','url','dir','view','template','viewFile','actionFile','templateFile','parameters'));
274269
Debugger::set('status',$status);

src/Tests/RouterTest.php

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,6 @@ protected function request($method, $uri)
6767
{
6868
$_SERVER['REQUEST_METHOD'] = $method;
6969
$_SERVER['REQUEST_URI'] = $uri;
70-
$q = strpos($uri, '?');
71-
if ($q !== false) {
72-
parse_str(substr($uri, $q + 1), $_GET);
73-
}
7470
Router::$initialized = false;
7571
}
7672

@@ -155,7 +151,7 @@ public function testGetParameters()
155151
public function testGetParameterWithWrongName()
156152
{
157153
$this->request('GET', '/admin/posts/view?idea=12');
158-
$this->assertEquals(array('id' => null), Router::getParameters());
154+
$this->assertEquals('/admin/posts/view', Router::getRedirect());
159155
}
160156

161157
public function testGetParameterHalf()
@@ -182,12 +178,10 @@ public function testGetParameterLastOnly()
182178
$this->assertEquals(array('code' => null, 'state' => '12'), Router::getParameters());
183179
}
184180

185-
public function testGetParameterGloballyUnset()
181+
public function testGetParametersTooMany()
186182
{
187-
$this->request('GET', '/admin/posts/view/4?state=12&code=23');
188-
$this->assertEquals(array('id' => '4'), Router::getParameters());
189-
$this->assertEquals(array(), $_GET);
190-
$this->assertEquals('/admin/posts/view/4', $_SERVER['REQUEST_URI']);
183+
$this->request('GET', '/admin/posts/view?state=12&code=23&id=4');
184+
$this->assertEquals('/admin/posts/view?id=4', Router::getRedirect());
191185
}
192186

193187
public function testActionWithoutView()

0 commit comments

Comments
 (0)