Передача настроек в презентеры
Вам нужно передавать в презентеры аргументы, которые не
являются объектами (например, информацию о том, работает ли приложение
в режиме отладки, пути к каталогам и т.д.), и поэтому не могут быть
переданы автоматически с помощью 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) {
// ...
}
}
}