Skip to content

Commit 7ab385f

Browse files
committed
MenuBuilder and separation of builders and services
1 parent 9868fef commit 7ab385f

File tree

5 files changed

+80
-3
lines changed

5 files changed

+80
-3
lines changed

src/WebApp/Service/AbstractLinkBuilder.php renamed to src/WebApp/Builder/AbstractLinkBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace WebApp\Service;
3+
namespace WebApp\Builder;
44

55
/** Descendants only need to declare methods like getViewLink(), getEditLink() etc. */
66
class AbstractLinkBuilder implements \TgUtils\LinkBuilder {
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
namespace WebApp\Builder;
4+
5+
abstract class AbstractMenuBuilder implements MenuBuilder {
6+
7+
protected $app;
8+
9+
public function __construct($app) {
10+
$this->app = $app;
11+
}
12+
13+
}
14+
15+

src/WebApp/Builder/MenuBuilder.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace WebApp\Builder;
4+
5+
interface MenuBuilder {
6+
7+
public function getMenu($subject, $params = NULL);
8+
9+
}
10+
11+

src/WebApp/Service/LinkBuilderService.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@
22

33
namespace WebApp\Service;
44

5-
class LinkBuilderService extends AbstractService {
5+
class LinkBuilderService extends AbstractService implements \TgUtils\LinkBuilder {
6+
7+
protected $builders;
68

79
public function __construct($app) {
810
parent::__construct($app);
911
$this->builders = array();
1012
}
1113

12-
public function getLink($subject, $action = LinkBuilder::VIEW, $params = NULL) {
14+
public function getLink($subject, $action = \TgUtils\LinkBuilder::VIEW, $params = NULL) {
1315
$builder = $this->getBuilder($subject);
1416
if ($builder != NULL) {
1517
return $builder->getLink($subject, $action, $params);
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
namespace WebApp\Service;
4+
5+
class MenuBuilderService extends AbstractService implements \WebApp\Builder\MenuBuilder {
6+
7+
protected $builders;
8+
9+
public function __construct($app) {
10+
parent::__construct($app);
11+
$this->builders = array();
12+
}
13+
14+
public function getMenu($subject, $params = NULL) {
15+
$builder = $this->getBuilder($subject);
16+
if ($builder != NULL) {
17+
return $builder->getMenu($subject, $params);
18+
}
19+
return NULL;
20+
}
21+
22+
public function getBuilder($subject) {
23+
$name = $this->getBuilderName($subject);
24+
if (!isset($this->builders[$name])) {
25+
$this->builders[$name] = $this->createBuilder($name);
26+
}
27+
return $this->builders[$name];
28+
}
29+
30+
protected function createBuilder($name) {
31+
return NULL;
32+
}
33+
34+
protected function getBuilderName($subject) {
35+
$name = NULL;
36+
if (is_string($subject)) {
37+
$name = $subject;
38+
} else if (is_object($subject)) {
39+
$name = strtolower(get_class($subject));
40+
if ($pos = strrpos($name, '\\')) {
41+
$name = substr($name, $pos + 1);
42+
}
43+
}
44+
return $name;
45+
}
46+
47+
}
48+
49+

0 commit comments

Comments
 (0)