Akce
Propojení Croneru s aplikací¶
Možnosti propojení Cronneru s aplikací¶
Nastavení cronu¶
- Poskytovatel http://webzdarma.cz službu cron neposkytuje [1].
- 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/ .
- Cron pravidelně volá PHP skript, který je mu zadán pomocí URL.
* * * * * curl <URL> # každou minutou přistoupí curl na URL
Cronner obecně¶
- nelze použít ve své poslední verzi (požaduje PHP >=7)
- Cronner je centrálně spouštěn cronem
- projde veškerý objekty, který byly zaregistrovány
- projde veškeré jejich veřejné metody
- vyloučí magické metody
- podívá se jestli mají nastavenu cron_name či cron_period
Aktivace Cronneru na objektu/metodě¶
1) Registrace Cronneru jako doplňku v config.neon¶
extension: cronner: stekycz\Cronner\DI\CronnerExtension
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]¶
- více viz dokumentace [5,3,2]
- všechny třídy modelu, které obsahují automaticky spouštěné funkce budou tedy poznamenány těmito komentářovými anotacemi
class Class1 { /** * @cronner-task <i-víceslovný-popis-události> * anotace vyžadována pro všechny public metody, které by měly být použity jako úlohy * * * @cronner-period <perioda, kdy má být událost vyvolána> * akceptovatelná je jakákoliv hodnota akceptovatelná funkcí strtotime() * nesmí obsahovat znaménko * * @cronner-time <čas, kdy je provádění události povoleno> * */ public function Class1_Function1() { //... } /* @cronner-period 1 day * @cronner-time 1:00-3:00 */ public function Class1_Function2() { //... } } class Class2 { /* @cronner-period 1 month * @cronner-time 1:00-3:00 */ public function Class2_Function1() { //... } /* @cronner-period 1 day * @cronner-time 1:00-3:00 */ public function Class2_Function2() { //... } }
3) Registrace všech tříd v modelu, které mají být Cronnerem procházeny (v souboru config.neon)¶
services: Class1 Class2
3) Založení presenteru pro automatizované spouštění úloh¶
- Právě tento prezenter by měl obsluhovat URL, na kterou přistupuje cron.
- 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.
class CronPresenter extends Presenter { /** * @var \stekycz\Cronner\Cronner * @inject */ private $cronner; /** * @var CronTasks * @inject */ public function injectCronner(Cronner $cronner) { $this->cronner = $cronner; } public function action() { $this->cronner->addTasksCallback(function (){ return new CronTasks(); }); $this->cronner->run(); $this->terminate(); } }
Zdroje¶
Aktualizováno uživatelem Miroslav Marek před téměř 8 roky(ů) · 1 revizí