/
BasePresenter.php
114 lines (94 loc) · 2.45 KB
/
BasePresenter.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php
namespace ShoPHP;
use Nette\Application\UI\ITemplate;
use Nette\Bridges\ApplicationLatte\Template;
use Nette\ComponentModel\IComponent;
use Nette\Localization\ITranslator;
use ShoPHP\Product\Category;
use ShoPHP\Product\CategoryService;
abstract class BasePresenter extends \Nette\Application\UI\Presenter
{
/** @var BaseDataService */
private $baseDataService;
/** @var CategoryService */
private $categoryService;
/** @var TemplateFilters */
private $templateFilters;
/** @var ITranslator */
private $translator;
/** @var Category */
private $currentCategory;
public function injectBase(
BaseDataService $baseDataService,
CategoryService $categoryService,
TemplateFilters $templateFilters,
ITranslator $translator
)
{
$this->baseDataService = $baseDataService;
$this->categoryService = $categoryService;
$this->templateFilters = $templateFilters;
$this->translator = $translator;
}
public function beforeRender()
{
parent::beforeRender();
$this->template->projectName = $this->baseDataService->getProjectName();
$this->template->categories = $this->categoryService->getRoot();
$this->template->currentCategory = $this->currentCategory;
}
protected function setCurrentCategory(Category $category)
{
$this->currentCategory = $category;
}
/**
* @return string[]
*/
public function formatLayoutTemplateFiles()
{
$dir = dirname(dirname($this->getReflection()->getFileName()));
return [
sprintf('%s/layout.latte', $dir),
];
}
/**
* @return string[]
*/
public function formatTemplateFiles()
{
$presenter = substr($this->getName(), strrpos($this->getName(), ':') + 1);
$dir = dirname($this->getReflection()->getFileName());
return [
sprintf("%s/%s.%s.latte", $dir, $presenter, $this->view),
];
}
/**
* @return ITemplate
*/
protected function createTemplate()
{
$template = parent::createTemplate();
if ($template instanceof Template) {
$template->setTranslator($this->translator);
$template->addFilter(null, function ($filter, ...$args) {
if (method_exists($this->templateFilters, $filter)) {
return $this->templateFilters->$filter(...$args);
}
return null;
});
}
return $template;
}
/**
* @param string $name
* @return IComponent
*/
protected function createComponent($name)
{
$component = parent::createComponent($name);
if ($component instanceof \Nette\Forms\Form) {
$component->setTranslator($this->translator);
}
return $component;
}
}