Projekt

Obecné

Profil

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)
  1. Cronner je centrálně spouštěn cronem
  2. projde veškerý objekty, který byly zaregistrovány
  3. projde veškeré jejich veřejné metody
  4. vyloučí magické metody
  5. 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í