Skip to content

Commit f813271

Browse files
committed
IRoute: added commented out getTargetPresenters()
1 parent 2d1e6b9 commit f813271

File tree

3 files changed

+55
-32
lines changed

3 files changed

+55
-32
lines changed

src/Application/IRouter.php

+6
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,10 @@ function match(Nette\Http\IRequest $httpRequest);
3535
*/
3636
function constructUrl(Request $appRequest, Nette\Http\Url $refUrl);
3737

38+
/**
39+
* Returns list of possible target presenters or NULL if the list is dynamic.
40+
* @return string[]|NULL
41+
*/
42+
// function getTargetPresenters();
43+
3844
}

src/Application/Routers/Route.php

+4-5
Original file line numberDiff line numberDiff line change
@@ -652,13 +652,12 @@ public function getFlags()
652652

653653
/**
654654
* Proprietary cache aim.
655-
* @internal
656-
* @return string|FALSE
655+
* @return string[]|NULL
657656
*/
658-
public function getTargetPresenter()
657+
public function getTargetPresenters()
659658
{
660659
if ($this->flags & self::ONE_WAY) {
661-
return FALSE;
660+
return array();
662661
}
663662

664663
$m = $this->metadata;
@@ -673,7 +672,7 @@ public function getTargetPresenter()
673672
}
674673

675674
if (isset($m[self::PRESENTER_KEY]['fixity']) && $m[self::PRESENTER_KEY]['fixity'] === self::CONSTANT) {
676-
return $module . $m[self::PRESENTER_KEY][self::VALUE];
675+
return array($module . $m[self::PRESENTER_KEY][self::VALUE]);
677676
}
678677
return NULL;
679678
}

src/Application/Routers/RouteList.php

+45-27
Original file line numberDiff line numberDiff line change
@@ -57,33 +57,6 @@ public function match(Nette\Http\IRequest $httpRequest)
5757
*/
5858
public function constructUrl(Nette\Application\Request $appRequest, Nette\Http\Url $refUrl)
5959
{
60-
if ($this->cachedRoutes === NULL) {
61-
$routes = array();
62-
$routes['*'] = array();
63-
64-
foreach ($this as $route) {
65-
$presenter = $route instanceof Route ? $route->getTargetPresenter() : NULL;
66-
67-
if ($presenter === FALSE) {
68-
continue;
69-
}
70-
71-
if (is_string($presenter)) {
72-
if (!isset($routes[$presenter])) {
73-
$routes[$presenter] = $routes['*'];
74-
}
75-
$routes[$presenter][] = $route;
76-
77-
} else {
78-
foreach ($routes as $id => $foo) {
79-
$routes[$id][] = $route;
80-
}
81-
}
82-
}
83-
84-
$this->cachedRoutes = $routes;
85-
}
86-
8760
if ($this->module) {
8861
if (strncmp($tmp = $appRequest->getPresenterName(), $this->module, strlen($this->module)) === 0) {
8962
$appRequest = clone $appRequest;
@@ -94,6 +67,10 @@ public function constructUrl(Nette\Application\Request $appRequest, Nette\Http\U
9467
}
9568

9669
$presenter = $appRequest->getPresenterName();
70+
if ($this->cachedRoutes === NULL) {
71+
$this->cachedRoutes = $this->buildCache();
72+
}
73+
9774
if (!isset($this->cachedRoutes[$presenter])) {
9875
$presenter = '*';
9976
}
@@ -132,4 +109,45 @@ public function getModule()
132109
return $this->module;
133110
}
134111

112+
113+
/**
114+
* Returns list of possible target presenters or NULL if the list is dynamic.
115+
*
116+
* @return string[]|NULL
117+
*/
118+
public function getTargetPresenters()
119+
{
120+
if ($this->cachedRoutes === NULL) {
121+
$this->cachedRoutes = $this->buildCache();
122+
}
123+
124+
if (empty($this->cachedRoutes['*'])) {
125+
$presenters = array_keys($this->cachedRoutes);
126+
unset($presenters[0]); // remove '*'
127+
return $presenters;
128+
}
129+
130+
return NULL;
131+
}
132+
133+
134+
/**
135+
* @return array
136+
*/
137+
private function buildCache()
138+
{
139+
$routes = array('*' => array());
140+
foreach ($this as $route) {
141+
$presenters = method_exists($route, 'getTargetPresenters') ? $route->getTargetPresenters() : NULL;
142+
$keys = is_array($presenters) ? $presenters : array_keys($routes);
143+
foreach ($keys as $key) {
144+
if (!isset($routes[$key])) {
145+
$routes[$key] = $routes['*'];
146+
}
147+
$routes[$key][] = $route;
148+
}
149+
}
150+
return $routes;
151+
}
152+
135153
}

0 commit comments

Comments
 (0)