/
presenter-traits.texy
50 lines (39 loc) 路 1.62 KB
/
presenter-traits.texy
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
Compunerea prezentatorilor din tr膬s膬turi
****************************************
.[perex]
Dac膬 trebuie s膬 implement膬m acela葯i cod 卯n mai multe prezent膬ri (de exemplu, verificarea faptului c膬 utilizatorul este conectat), este tentant s膬 plas膬m codul 卯ntr-un str膬mo葯 comun. A doua op葲iune este de a crea [tr膬s膬turi |nette:introduction-to-object-oriented-programming#traits] cu scop unic.
Avantajul acestei solu葲ii este c膬 fiecare prezentator poate utiliza doar tr膬s膬turile de care are nevoie efectiv, 卯n timp ce mo葯tenirea multipl膬 nu este posibil膬 卯n PHP.
Aceste tr膬s膬turi pot profita de faptul c膬 toate [metodele de injectare |inject-method-attribute#inject methods] sunt apelate secven葲ial atunci c芒nd este creat prezentatorul. Trebuie doar s膬 v膬 asigura葲i c膬 numele fiec膬rei metode inject este unic.
Traits pot ag膬葲a codul de ini葲ializare 卯n evenimentele [onStartup sau onRender |application:presenters#Events].
Exemple:
```php
trait RequireLoggedUser
{
public function injectRequireLoggedUser(): void
{
$this->onStartup[] = function () {
if (!$this->getUser()->isLoggedIn()) {
$this->redirect('Sign:in', $this->storeRequest());
}
};
}
}
trait StandardTemplateFilters
{
public function injectStandardTemplateFilters(TemplateBuilder $builder): void
{
$this->onRender[] = function () use ($builder) {
$builder->setupTemplate($this->template);
};
}
}
```
Prezentatorul folose葯te apoi pur 葯i simplu aceste tr膬s膬turi:
```php
class ArticlePresenter extends Nette\Application\UI\Presenter
{
use StandardTemplateFilters;
use RequireLoggedUser;
}
```
{{sitename: Best Practices}}