Projekt

Obecné

Profil

Propojení Croneru s aplikací » Historie » Verze 1

Miroslav Marek, 2017-05-23 00:15

1 1 Miroslav Marek
h1. Propojení Croneru s aplikací
2
3
h2. Možnosti propojení Cronneru s aplikací
4
5
h3. Nastavení cronu
6
7
* Poskytovatel http://webzdarma.cz službu cron neposkytuje [1].
8
* Proto bude zapotřebí opakované spouštění zajistit externě. Možným řešením je využítí služby https://www.webcron.org/ .
9
* Cron pravidelně volá PHP skript, který je mu zadán pomocí URL.
10
11
<pre>
12
* * * * * curl <URL>
13
# každou minutou přistoupí curl na URL
14
</pre>
15
16
h3. Cronner obecně
17
18
* nelze použít ve své poslední verzi (požaduje PHP >=7)
19
20
# Cronner je centrálně spouštěn cronem
21
# projde veškerý objekty, který byly zaregistrovány
22
# projde veškeré jejich veřejné metody
23
# vyloučí magické metody
24
# podívá se jestli mají nastavenu cron_name či cron_period
25
26
h3. Aktivace Cronneru na objektu/metodě
27
28
h4. 1) Registrace Cronneru jako doplňku v config.neon
29
30
<pre>
31
extension:
32
    cronner: stekycz\Cronner\DI\CronnerExtension
33
</pre>
34
35
h4. 2) Přidat komentářové anotace do těla třídy, před název funkce, která má být spouštěna automaticky [2]
36
37
* více viz dokumentace [5,3,2]
38
* všechny třídy modelu, které obsahují automaticky spouštěné funkce budou tedy poznamenány těmito komentářovými anotacemi
39
40
<pre>
41
class Class1 {
42
    /**
43
     * @cronner-task <i-víceslovný-popis-události>
44
     *      anotace vyžadována pro všechny public metody, které by měly být použity jako úlohy
45
     *
46
     *
47
     * @cronner-period <perioda, kdy má být událost vyvolána>
48
     *      akceptovatelná je jakákoliv hodnota akceptovatelná funkcí strtotime()
49
     *      nesmí obsahovat znaménko
50
     *
51
     * @cronner-time <čas, kdy je provádění události povoleno>
52
     *
53
     */
54
    public function Class1_Function1() {
55
        //...
56
    }
57
58
    /* @cronner-period 1 day
59
     * @cronner-time 1:00-3:00
60
     */
61
    public function Class1_Function2() {
62
        //...
63
    }
64
}
65
66
class Class2 {
67
    /* @cronner-period 1 month
68
     * @cronner-time 1:00-3:00
69
     */
70
    public function Class2_Function1() {
71
        //...
72
    }
73
74
    /* @cronner-period 1 day
75
     * @cronner-time 1:00-3:00
76
     */
77
    public function Class2_Function2() {
78
        //...
79
    }
80
}
81
</pre>
82
83
h4. 3) Registrace všech tříd v modelu, které mají být Cronnerem procházeny (v souboru config.neon)
84
85
<pre>
86
services:
87
    Class1
88
    Class2
89
</pre>
90
91
h4. 3) Založení presenteru pro automatizované spouštění úloh
92
93
* Právě tento prezenter by měl obsluhovat URL, na kterou přistupuje cron.
94
* Volání this->cronner->run() spustí Cronner, který projde všechny metody, a v danou chvíli rozhodne bude-li je spouštět či nebude.
95
96
<pre>
97
class CronPresenter extends Presenter {
98
    /**
99
     * @var \stekycz\Cronner\Cronner
100
     * @inject
101
     */
102
    private $cronner;
103
104
    /**
105
     * @var CronTasks
106
     * @inject
107
     */
108
    public function injectCronner(Cronner $cronner)
109
    {
110
        $this->cronner = $cronner;
111
    }
112
113
    public function action()
114
    {
115
        $this->cronner->addTasksCallback(function (){ return new CronTasks(); });
116
        $this->cronner->run();
117
        $this->terminate();
118
    }
119
}
120
</pre>
121
122
h4. Zdroje
123
124
* [1] https://www.webzdarma.cz/info/srovnani/
125
* [2] https://componette.com/stekycz/cronner/
126
* [3] https://forum.nette.org/cs/13705-cronner-nastroj-pro-jednoduchou-spravu-cronovych-uloh
127
* [4] https://www.youtube.com/watch?v=b2ITJXp-ZR0
128
* [5] https://github.com/stekycz/Cronner