PHP: Čtení anotací

POZOR! Článek jsem napsal před více jak rokem, a tudíž už nemusí reflektovat můj nynější názor nebo může být zastaralý.

Dnes navazuji na předchozí článek a publikuji další komponentu, tentokrát pro čtení anotací.

Představte si, že máte třídu podobnou této:

class BestController {
    public function index() {}
}

A chtěli byste si přímo u metody nadefinovat, jakou šablonu pro vykreslení chcete použít.
Není problém, použijeme anotaci.

class BestController {
    /**
     * @Template template/index.php
     */
    public function index() {}
}

Anotaci si můžeme vytáhnout díky reflexi metodou getDocComment(). Ta vrátí celý dokumentační komentář (jak napovídá název metody…), což není ideální.

Napsal jsem si tedy komponentu, která nejen, že vytáhne přesně požadovanou anotaci, nebo všechny anotace najednou, ale také umožňuje použít JSON formát, který vrátí jako pole.

Názorný příklad

class BestController {
    /**
     * @Template {
     *     "url": "index.html"
     * }
     * @Route /index
     */
    public function index() {}
}

Anotace lze poté vytáhnout takto:

$reader = new \Gephart\Annotation\Reader();
$annotations = $reader->getAll(BestController::class, "index");

$annotations["Template"]; // ["url" => "index.html"]
$annotations["Route"]; // /index

Závěrem

Kód včetně testu je opět na GitHubu: https://github.com/gephart/annotation.

Instalovat lze jednoduše přes composer:

composer require gephart/annotation

Sdílením článku mi pomůžete a uděláte mi velikou radost :)

Komentáře