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 |