1: <?php
2:
3: namespace Demo;
4:
5: use BN\Compiler\Grammar\GrammarBuilder;
6: use BN\Compiler\EvaluatorInteractor;
7:
8: class Controller
9: {
10: private $model;
11: private $variables;
12: private $interactor;
13:
14: public function __construct(GrammarBuilder $grammar, $data)
15: {
16: $defineVariables = isset($data['variables']) && $data['variables'] !== '';
17: $this->variables = $defineVariables ? transformVars($data['variables']) : new \stdClass();
18: $inputVariables = $defineVariables ? $data['variables'] : '';
19: $input = isset($data['input']) ? $data['input'] : '';
20: $this->model = new Model($input, $inputVariables);
21: $this->interactor = new EvaluatorInteractor($grammar);
22: }
23:
24: public function __invoke()
25: {
26: $presenter = new Presenter($this->model);
27: $this->interactor->__invoke($this->model->input, $this->variables, $presenter);
28: $presenter->variables($this->variables);
29: }
30:
31: public function getModel()
32: {
33: return $this->model;
34: }
35: }
36:
37: function transformVars($vars)
38: {
39: $variables = new \stdClass();
40: foreach (explode(',', $vars) as $definition) {
41: $v = explode('=', $definition);
42: if (count($v) == 2) {
43: $variables->{$v[0]} = $v[1];
44: }
45: }
46: return $variables;
47: }
48: