Nette Documentation Preview

syntax
Presenterへの設定の受け渡し
******************

.[perex]
Presenterにオブジェクトではない引数(デバッグモードで実行されているかどうかの情報、ディレクトリへのパスなど)を渡す必要があり、したがってautowiringを使用して自動的に渡すことができない場合はどうすればよいですか?解決策は、それらを`Settings`オブジェクトにカプセル化することです。

`Settings` サービスは、実行中のアプリケーションに関する情報をPresenterに提供するための非常に簡単で便利な方法を提供します。その具体的な形式は、完全にあなたの特定のニーズに依存します。例:

```php
namespace App;

class Settings
{
	public function __construct(
		// PHP 8.1以降、readonlyを指定可能
		public bool $debugMode,
		public string $appDir,
		// など
	) {}
}
```

設定への登録例:

```neon
services:
	- App\Settings(
		%debugMode%,
		%appDir%,
	)
```

Presenterがこのサービスによって提供される情報を必要とする場合、単にコンストラクタでそれを要求します:

```php
class MyPresenter extends Nette\Application\UI\Presenter
{
	public function __construct(
		private App\Settings $settings,
	) {}

	public function renderDefault()
	{
		if ($this->settings->debugMode) {
			// ...
		}
	}
}
```

{{sitename: ベストプラクティス}}

Presenterへの設定の受け渡し

Presenterにオブジェクトではない引数(デバッグモードで実行されているかどうかの情報、ディレクトリへのパスなど)を渡す必要があり、したがってautowiringを使用して自動的に渡すことができない場合はどうすればよいですか?解決策は、それらをSettingsオブジェクトにカプセル化することです。

Settings サービスは、実行中のアプリケーションに関する情報をPresenterに提供するための非常に簡単で便利な方法を提供します。その具体的な形式は、完全にあなたの特定のニーズに依存します。例:

namespace App;

class Settings
{
	public function __construct(
		// PHP 8.1以降、readonlyを指定可能
		public bool $debugMode,
		public string $appDir,
		// など
	) {}
}

設定への登録例:

services:
	- App\Settings(
		%debugMode%,
		%appDir%,
	)

Presenterがこのサービスによって提供される情報を必要とする場合、単にコンストラクタでそれを要求します:

class MyPresenter extends Nette\Application\UI\Presenter
{
	public function __construct(
		private App\Settings $settings,
	) {}

	public function renderDefault()
	{
		if ($this->settings->debugMode) {
			// ...
		}
	}
}