1: <?php
2:
3: namespace PHPixie\Bundles;
4:
5: class RouteResolvers implements \PHPixie\Route\Resolvers\Registry
6: {
7: protected $bundleRegistry;
8:
9: public function __construct($bundleRegistry)
10: {
11: $this->bundleRegistry = $bundleRegistry;
12: }
13:
14: public function get($name)
15: {
16: $path = explode('.', $name, 2);
17:
18: $resolver = $this->getBundleResolver($path[0]);
19:
20: if(count($path) > 1) {
21: if(!($resolver instanceof \PHPixie\Route\Resolvers\Registry)) {
22: throw new \PHPixie\Bundles\Exception(
23: "Route resolver in '{$path[0]}' is not a bundleRegistry"
24: );
25: }
26:
27: $resolver = $resolver->get($path[1]);
28: }
29:
30: return $resolver;
31: }
32:
33: protected function getBundleResolver($name)
34: {
35: $bundle = $this->bundleRegistry->get($name);
36:
37: $resolver = null;
38:
39: if($bundle instanceof \PHPixie\Bundles\Bundle\Provides\RouteResolver) {
40: $resolver = $bundle->routeResolver();
41: }
42:
43: if($resolver !== null) {
44: return $resolver;
45: }
46:
47: throw new \PHPixie\Bundles\Exception(
48: "Bundle '$name' does not provide a route resolver"
49: );
50: }
51: }