Przekazywanie ustawień do prezenterów
Czy potrzebujesz przekazać argumenty do prezenterów, które nie są obiektami (np. Informacje o tym, czy
działają w trybie debugowania, ścieżki do katalogów itp.) I dlatego nie mogą być przekazywane automatycznie przez
autowiring? Rozwiązaniem jest enkapsulacja ich w obiekcie Settings
.
Serwis Settings
to bardzo prosty, a zarazem przydatny sposób na przekazanie informacji o działającej aplikacji
prezenterom. Jego konkretna forma zależy wyłącznie od Twoich konkretnych potrzeb. Przykład:
namespace App;
class Settings
{
public function __construct(
// od PHP 8.1 je možné uvést readonly
public bool $debugMode,
public string $appDir,
// a tak dále
) {}
}
Przykładowa rejestracja konfiguracji:
services:
- App\Settings(
%debugMode%,
%appDir%,
)
Kiedy prezenter potrzebuje informacji dostarczanych przez tę usługę, po prostu prosi o nie w konstruktorze:
class MyPresenter extends Nette\Application\UI\Presenter
{
public function __construct(
private App\Settings $settings,
) {}
public function renderDefault()
{
if ($this->settings->debugMode) {
// ...
}
}
}