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