mirror of
				https://github.com/yiisoft/yii2.git
				synced 2025-11-04 06:37:55 +08:00 
			
		
		
		
	Fixes #15142: Fixed array params replacing in yii\helpers\BaseUrl::current()
				
					
				
			This commit is contained in:
		
				
					committed by
					
						
						Alexander Makarov
					
				
			
			
				
	
			
			
			
						parent
						
							1330ca9ec1
						
					
				
				
					commit
					01ff1f6593
				
			@ -4,6 +4,7 @@ Yii Framework 2 Change Log
 | 
			
		||||
2.0.14 under development
 | 
			
		||||
------------------------
 | 
			
		||||
 | 
			
		||||
- Bug #15142: Fixed array params replacing in `yii\helpers\BaseUrl::current()` (IceJOKER)
 | 
			
		||||
- Bug #15249: Controllers in subdirectories were not visible in commands list (IceJOKER)
 | 
			
		||||
- Enh #5515: Added default value for `yii\behaviors\BlameableBehavior` for cases when the user is guest (dmirogin)
 | 
			
		||||
- Bug #14276: Fixed I18N format with dotted parameters (developeruz)
 | 
			
		||||
 | 
			
		||||
@ -429,7 +429,7 @@ class BaseUrl
 | 
			
		||||
    {
 | 
			
		||||
        $currentParams = Yii::$app->getRequest()->getQueryParams();
 | 
			
		||||
        $currentParams[0] = '/' . Yii::$app->controller->getRoute();
 | 
			
		||||
        $route = array_replace($currentParams, $params);
 | 
			
		||||
        $route = array_replace_recursive($currentParams, $params);
 | 
			
		||||
        return static::toRoute($route, $scheme);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -12,7 +12,6 @@ use yii\base\Action;
 | 
			
		||||
use yii\base\Module;
 | 
			
		||||
use yii\helpers\Url;
 | 
			
		||||
use yii\web\Controller;
 | 
			
		||||
use yii\web\UrlManager;
 | 
			
		||||
use yii\widgets\Menu;
 | 
			
		||||
use yiiunit\framework\filters\stubs\UserIdentity;
 | 
			
		||||
use yiiunit\TestCase;
 | 
			
		||||
@ -122,14 +121,23 @@ class UrlTest extends TestCase
 | 
			
		||||
    {
 | 
			
		||||
        $this->mockAction('page', 'view', null, []);
 | 
			
		||||
        Yii::$app->request->setQueryParams(['id' => 10, 'name' => 'test', 10 => 0]);
 | 
			
		||||
        $uri = '/base/index.php?r=page%2Fview';
 | 
			
		||||
 | 
			
		||||
        $this->assertEquals('/base/index.php?r=page%2Fview&id=10&name=test&10=0', Url::current());
 | 
			
		||||
        $this->assertEquals('/base/index.php?r=page%2Fview&id=20&name=test&10=0', Url::current(['id' => 20]));
 | 
			
		||||
        $this->assertEquals('/base/index.php?r=page%2Fview&name=test&10=0', Url::current(['id' => null]));
 | 
			
		||||
        $this->assertEquals('/base/index.php?r=page%2Fview&name=test&10=0&1=yes', Url::current(['id' => [], 1 => 'yes']));
 | 
			
		||||
        $this->assertEquals('/base/index.php?r=page%2Fview&name=test&10=0', Url::current(['id' => []]));
 | 
			
		||||
        $this->assertEquals('/base/index.php?r=page%2Fview&name=test', Url::current(['id' => null, 10 => null]));
 | 
			
		||||
        $this->assertEquals('/base/index.php?r=page%2Fview&name=test&1=yes', Url::current(['id' => null, 10 => null, 1 => 'yes']));
 | 
			
		||||
        $this->assertEquals($uri . '&id=10&name=test&10=0', Url::current());
 | 
			
		||||
        $this->assertEquals($uri . '&id=20&name=test&10=0', Url::current(['id' => 20]));
 | 
			
		||||
        $this->assertEquals($uri . '&name=test&10=0', Url::current(['id' => null]));
 | 
			
		||||
        $this->assertEquals($uri . '&name=test&10=0&1=yes', Url::current(['id' => [], 1 => 'yes']));
 | 
			
		||||
        $this->assertEquals($uri . '&name=test&10=0', Url::current(['id' => []]));
 | 
			
		||||
        $this->assertEquals($uri . '&name=test', Url::current(['id' => null, 10 => null]));
 | 
			
		||||
        $this->assertEquals($uri . '&name=test&1=yes', Url::current(['id' => null, 10 => null, 1 => 'yes']));
 | 
			
		||||
 | 
			
		||||
        $params = ['arr' => ['attr_one' => 1, 'attr_two' => 2]];
 | 
			
		||||
        Yii::$app->request->setQueryParams($params);
 | 
			
		||||
 | 
			
		||||
        $this->assertEquals($uri . '&arr%5Battr_one%5D=1&arr%5Battr_two%5D=2', Url::current());
 | 
			
		||||
        $this->assertEquals($uri, Url::current(['arr' => null]));
 | 
			
		||||
        $this->assertEquals($uri . '&arr%5Battr_two%5D=2', Url::current(['arr' => ['attr_one' => null]]));
 | 
			
		||||
        $this->assertEquals($uri . '&arr%5Battr_one%5D=1&arr%5Battr_two%5D=two', Url::current(['arr' => ['attr_two' => 'two']]));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testPrevious()
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user