Formát callbacků
V plugin.json je možné definovat callback
několika možnými způsoby.
(Argumenty předané callbacku závisí na konkrétním způsobu jeho použití. Viz dokumentace plugin.json daného typu pluginu.)
Skript
Nejjednodušší způsob definice callbacku. Cesta k PHP skriptu, který vrátí funkci, kterou je možné zavolat.
{"script": "example_script.php"}
Příklad example_script.php:
<?php
return function () {
// do something
};
Tip: Uvnitř funkce (closure) je dostupná proměnná $this, která obsahuje instanci pluginu,
který tento skript definoval.
Metoda
Definice metody, která se má zavolat na instanci pluginu. Hodí se zejména pokud plugin definuje vlastní třídu v plugin.json pomocí klíče "class".
{"method": "fooBar"}
Příklad metody ve třídě pluginu:
<?php
namespace SunlightExtend\Example;
use Sunlight\Plugin\ExtendPlugin;
class ExamplePlugin extends ExtendPlugin
{
function fooBar()
{
// do something
}
}Callback
Libovolný PHP callback.
{"callback": "some_function"}
{"callback": "SomeClass::some_method"}
{"callback": ["SomeClass", "some_method"]}
Middlewares
U každého typu callbacku je navíc možné definovat seznam middlewares. Každý middleware je další definice callbacku (tedy skript, metoda nebo callback).
{
"script": "example_script.php",
"middlewares": [
{"callback": "FirstMiddleware::doSomething"},
{"callback": "SecondMiddleware::doSomething"}
]
}
Middleware je zavolán před hlavním callbackem. Dostane následující argumenty:
$next- funkce, která zavolá další middleware; pokud další middleware neexistuje, zavolá hlavní callback- ostatní individuální argumenty, se kterými byl callback zavolán
Každý middleware tedy efektivně "obalí" následující vrstvu a může provádět následující:
- provádět akce před a po spuštění další vrstvy
- modifikovat argumenty pro další vrstvu
- modifikovat návratovou hodnotu další vrstvy
- nespustit další vrstvu
Příklady middlewares
Middleware, které přeskočí volání callbacku, když uživatel není přihlášený:
<?php
use Sunlight\User;
return function ($next, ...$args) {
if (!User::isLoggedIn()) {
return;
}
$next(...$args);
};
Middleware (použitelný s extend plugin routes), které automaticky zformátuje a pošle návratovou hodnotu callbacku jako JSON:
<?php
use Sunlight\Plugin\PluginRouterMatch;
use Sunlight\Util\Response;
use Sunlight\WebState;
return function ($next, WebState $index, PluginRouterMatch $match) {
Response::json($next($index, $match));
};