Передача настроек в презентеры
Нужно передать в презентеры не объектные аргументы (например,
флаг режима отладки, пути к каталогам и подобное), которые нельзя
передать автоматически через autowiring? Решение – упаковать их в
отдельный объект Settings.
Сервис Settings даёт очень простой, но действенный способ
снабдить презентеры сведениями о работающем приложении. Его
конкретная структура полностью зависит от ваших нужд. Пример:
namespace App;
class Settings
{
public function __construct(
// начиная с PHP 8.1 можно использовать readonly
public bool $debugMode,
public string $appDir,
// и так далее
) {}
}
Пример регистрации в конфигурации:
services:
- App\Settings(
%debugMode%,
%appDir%,
)
Когда презентеру нужны сведения, предоставляемые этим сервисом, он просто запрашивает его в своём конструкторе:
class MyPresenter extends Nette\Application\UI\Presenter
{
public function __construct(
private App\Settings $settings,
) {}
public function renderDefault()
{
if ($this->settings->debugMode) {
// ...
}
}
}