Skip to content

Commit ef333e6

Browse files
committed
LinkGenerator: added withReferenceUrl()
1 parent 7575c5f commit ef333e6

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

src/Application/LinkGenerator.php

+13-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
namespace Nette\Application;
1111

1212
use Nette;
13+
use Nette\Http\UrlScript;
1314
use Nette\Routing\Router;
1415

1516

@@ -23,14 +24,14 @@ final class LinkGenerator
2324
/** @var Router */
2425
private $router;
2526

26-
/** @var Nette\Http\UrlScript */
27+
/** @var UrlScript */
2728
private $refUrl;
2829

2930
/** @var IPresenterFactory|null */
3031
private $presenterFactory;
3132

3233

33-
public function __construct(Router $router, Nette\Http\UrlScript $refUrl, IPresenterFactory $presenterFactory = null)
34+
public function __construct(Router $router, UrlScript $refUrl, IPresenterFactory $presenterFactory = null)
3435
{
3536
$this->router = $router;
3637
$this->refUrl = $refUrl;
@@ -88,4 +89,14 @@ public function link(string $dest, array $params = []): string
8889
}
8990
return $url . $frag;
9091
}
92+
93+
94+
public function withReferenceUrl(string $url): self
95+
{
96+
return new self(
97+
$this->router,
98+
new UrlScript($url),
99+
$this->presenterFactory
100+
);
101+
}
91102
}

tests/Routers/LinkGenerator.phpt

+8
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,14 @@ namespace {
8989
Assert::same('http://nette.org/en/?0=10&presenter=Homepage', $generator->link('Homepage:', [10]));
9090
Assert::same('http://nette.org/en/?0=10&id=20&action=detail&presenter=Homepage', $generator->link('Homepage:detail', [10, 'id' => 20]));
9191
Assert::same('http://nette.org/en/?presenter=Homepage#frag:ment', $generator->link('Homepage:#frag:ment'));
92+
Assert::same('http://nette.org/en/?action=default&presenter=Homepage', $generator->link('Homepage:default'));
9293
});
9394

95+
96+
test(function () {
97+
$generator = new LinkGenerator(new Routers\SimpleRouter, new Http\UrlScript('http://nette.org/en/'));
98+
$generator2 = $generator->withReferenceUrl('http://nette.org/cs/');
99+
Assert::same('http://nette.org/en/?action=default&presenter=Homepage', $generator->link('Homepage:default'));
100+
Assert::same('http://nette.org/cs/?action=default&presenter=Homepage', $generator2->link('Homepage:default'));
101+
});
94102
}

0 commit comments

Comments
 (0)