PHP: Čtení anotací

Publikováno PHP

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

Komentáře