1 | <?php |
||
27 | class TwigQuerySourceManager implements ManagerInterface |
||
28 | { |
||
29 | /** |
||
30 | * @var \Twig_Environment |
||
31 | */ |
||
32 | protected $twig; |
||
33 | |||
34 | /** |
||
35 | * @var ExecutorInterface[] |
||
36 | */ |
||
37 | protected $executors; |
||
38 | |||
39 | 7 | public function __construct(\Twig_Environment $twig) |
|
44 | |||
45 | /** |
||
46 | * {@inheritdoc} |
||
47 | */ |
||
48 | 5 | public function get($name, array $args = array()) |
|
49 | { |
||
50 | try { |
||
51 | 5 | return $this->twig->render($name, $args); |
|
52 | 3 | } catch (\Twig_Error_Loader $e) { |
|
53 | 1 | throw new SourceNotFoundException(sprintf('Could not find query source: "%s".', $name), 0, $e); |
|
54 | 2 | } catch (\Twig_Error_Syntax $e) { |
|
55 | 1 | throw new SyntaxException(sprintf('Query source "%s" contains Twig syntax error and could not be compiled.', $name), 0, $e); |
|
56 | 1 | } catch (\Exception $e) { |
|
57 | 1 | throw new RuntimeException('Unknown exception occured', 0, $e); |
|
58 | } |
||
59 | } |
||
60 | |||
61 | /** |
||
62 | * {@inheritdoc} |
||
63 | */ |
||
64 | 2 | public function has($name) |
|
68 | |||
69 | /** |
||
70 | * {@inheritdoc} |
||
71 | */ |
||
72 | 1 | public function execute($name, array $args = array(), array $types = array(), $executor = 'default') |
|
73 | { |
||
74 | 1 | if (!array_key_exists($executor, $this->executors)) { |
|
75 | throw new RuntimeException(sprintf('Requested executor "%s" does not exists.', $executor)); |
||
76 | } |
||
77 | |||
78 | 1 | $executor = $this->executors[$executor]; |
|
79 | |||
80 | try { |
||
81 | /** |
||
82 | * @var ExecutorInterface $executor |
||
83 | */ |
||
84 | 1 | return $executor->execute($this->get($name, $args), $args, $types); |
|
85 | } catch (\Exception $e) { |
||
86 | |||
87 | if ($e instanceof ExceptionInterface) { |
||
88 | throw $e; |
||
89 | } |
||
90 | |||
91 | throw new ExecutionException(sprintf('Query "%s" could not be executed.', $name), 0, $e); |
||
92 | } |
||
93 | } |
||
94 | |||
95 | /** |
||
96 | * Register query executor. |
||
97 | * |
||
98 | * @param ExecutorInterface $executor |
||
99 | * @param string $name |
||
100 | */ |
||
101 | 6 | public function registerExecutor(ExecutorInterface $executor, $name) |
|
105 | } |
||
106 |