Jak implementovat a napojit Middleware s Presentery?
- matronator
- Člen | 38
Zdravím! Dělám jednoduchou stránku, která bude sloužit vlastně pouze
jako API. Mám RouterFactory
která vypadá takto:
declare(strict_types=1);
namespace App\Services;
use Nette\Application\Routers\RouteList;
class RouterFactory
{
public static function createRouter(): RouteList
{
$router = new RouteList;
$router->addRoute('api', 'Api:default');
return $router;
}
}
Jak mohu do Routeru přidat možnost přidávání vlastního Middlewaru? Abych to mohl dělat například takto:
$router->addRoute('api', 'Api:default', ['middleware' => 'auth']);
Nebo pokud vás napadá jak jinak implementovat s presentery middleware, tak prosím poraďte.
PS: Nechci používat žádnou knihovnu na API jako Apitte atd. Chci se obejít pouze s “defaultními” Nette balíčky.
- Infanticide0
- Člen | 96
Tohle Nette, pokud vím, neumí. Nejblíž k tomu budou asi presenter Traity
nebo Moduly a jejich BasePresentery (různý sekce API, různý MW
pravidla).
Další cestou je si vytvořit vlastní Application po vzoru Apitte (vzít si
jen tu podporu Middlewares)
- Marek Bartoš
- Nette Blogger | 1230
Nejjednodušší bude nejspíš použít událost
Nette\Application\Application::$onRequest
, případně
$onPresenter
. V těch už si získáš request/presenter a
rozhodneš zda middlewares spustit.
Volil bych spíš událost onPresenter ve které je dostupná instance
presenteru – pro kontrolu, že se jedná o api presenter.
A předává se do ní i Application. Z Application si můžeš získat
seznam requestů – ten aktuální bude v poli poslední. Ty předchozí jsou
pro forward. Včetně forward na error presenter v případě, že routovaný
presenter neexistuje.
Samotné middlewares už jen zavoláš v řadě za sebou a můžeš v nich
vyhodit BadRequestException nebo přenastavit parametry requestu.
Editoval Marek Bartoš (24. 5. 20:51)