Nette Documentation Preview

syntax
Nette Bootstrap
***************

.[perex]
Nette の個々のコンポーネントは設定ファイルで設定します。ここではそのファイルの読み込み方をお見せします。

.[tip]
フレームワーク全体を使っているなら、ほかに何もする必要はありません。あなたのプロジェクトには設定ファイル用の `config/` のディレクトリが用意されていて、その読み込みは[アプリケーションの立ち上げ役 |application:bootstrapping#DI コンテナの設定]が受け持ちます。この記事は、Nette のライブラリをひとつだけ使っていて、設定ファイルを活かしたい人のためのものです。

設定ファイルはふつう [NEON 形式|neon:format]で書かれ、[それに対応したエディタ |tools:ide]で編集するのがいちばんです。設定ファイルは、オブジェクトを**どう作ってどう整えるか**の指示だと考えられます。ですから設定を読み込んだ結果はいわゆるファクトリになります。これは、あなたが使いたいほかのオブジェクトを求めに応じて作るオブジェクトです。たとえばデータベース接続などです。

このファクトリは *dependency injection コンテナ*(DI コンテナ)とも呼ばれます。詳しいことに関心があるなら、[dependency injection |dependency-injection:]の章をご覧ください。

設定の読み込みとコンテナの生成は [api:Nette\Bootstrap\Configurator]クラスが受け持つので、まずその `nette/bootstrap` のパッケージを入れます。

```shell
composer require nette/bootstrap
```

そして `Configurator` クラスのインスタンスを作ります。作られる DI コンテナはディスクに蓄えられるので、それを保存するディレクトリへのパスを設定する必要があります。

```php
$configurator = new Nette\Bootstrap\Configurator;
$configurator->setTempDirectory(__DIR__ . '/temp');
```

Linux や macOS では、`temp/` のディレクトリに[書き込みの権限 |nette:troubleshooting#ディレクトリの権限の設定]を与えてください。

ではいよいよ設定ファイルそのものです。`addConfig()` で読み込みます。

```php
$configurator->addConfig(__DIR__ . '/database.neon');
```

設定ファイルをもっと足したいなら、`addConfig()` の関数を何度でも呼べます。ファイルに同じキーの要素が現れると、それは上書きされます(配列の場合は[併合されます |dependency-injection:configuration#統合])。あとから足したファイルのほうが、前のものより優先されます。

最後の一歩は DI コンテナを作ることです。

```php
$container = $configurator->createContainer();
```

これで望むオブジェクトが作られます。たとえば [Nette Database|database:configuration]の設定を使っているなら、データベース接続を作ってもらえます。

```php
$db = $container->getByType(Nette\Database\Connection::class);
// または
$explorer = $container->getByType(Nette\Database\Explorer::class);
// あるいは複数の接続を作る場合
$db = $container->getByName('database.main.connection');
```

これでデータベースを扱えます。


開発モードと本番モード
-----------

開発モードでは、設定ファイルが変わるたびにコンテナが自動的に更新されます。本番モードでは一度だけ作られ、変更は確かめられません。ですから開発モードはプログラマーの心地よさを最大にすることを、本番モードは性能と本番への配置を目指しています。

モードの選択は自動の判別で行われるので、ふつうは何かを設定したり手で切り替えたりする必要はありません。アプリケーションが localhost(つまり IP アドレス `127.0.0.1` または `::1`)で動いていて、プロキシ(つまりその HTTP ヘッダー)がないときが開発モードです。そうでなければ本番モードで動きます。

たとえば特定の IP アドレスからアクセスするプログラマーのように、ほかの場合にも開発モードを有効にしたいなら、`setDebugMode()` を使います。

```php
$configurator->setDebugMode('23.75.345.200');
// IP アドレスの配列も指定できます
```

IP アドレスとクッキーを組み合わせることを強くおすすめします。`nette-debug` のクッキーに秘密のトークン、たとえば `secret1234` を入れておきます。こうすれば、そのトークンをクッキーに持つ、特定の IP アドレスからアクセスするプログラマーにだけ開発モードを有効にできます。

```php
$configurator->setDebugMode('secret1234@23.75.345.200');
```

localhost も含めて、開発モードを完全に切ることもできます。

```php
$configurator->setDebugMode(false);
```


パラメータ
-----

設定ファイルではパラメータも使えます。それは [`parameters` の区画 |dependency-injection:configuration#パラメータ]で定めます。

`addDynamicParameters()` メソッドで外から入れることもできます。

```php
$configurator->addDynamicParameters([
	'remoteIp' => $_SERVER['REMOTE_ADDR'],
]);
```

`remoteIp` のパラメータは、設定の中で `%remoteIp%` の書き方で参照できます。


新しい版へ上げるなら、[アップグレード |upgrading]のページをご覧ください。

Nette Bootstrap

Nette の個々のコンポーネントは設定ファイルで設定します。ここではそのファイルの読み込み方をお見せします。

フレームワーク全体を使っているなら、ほかに何もする必要はありません。あなたのプロジェクトには設定ファイル用の config/ のディレクトリが用意されていて、その読み込みはアプリケーションの立ち上げ役が受け持ちます。この記事は、Nette のライブラリをひとつだけ使っていて、設定ファイルを活かしたい人のためのものです。

設定ファイルはふつう NEON 形式で書かれ、それに対応したエディタで編集するのがいちばんです。設定ファイルは、オブジェクトをどう作ってどう整えるかの指示だと考えられます。ですから設定を読み込んだ結果はいわゆるファクトリになります。これは、あなたが使いたいほかのオブジェクトを求めに応じて作るオブジェクトです。たとえばデータベース接続などです。

このファクトリは *dependency injection コンテナ*(DI コンテナ)とも呼ばれます。詳しいことに関心があるなら、dependency injectionの章をご覧ください。

設定の読み込みとコンテナの生成は Nette\Bootstrap\Configuratorクラスが受け持つので、まずその nette/bootstrap のパッケージを入れます。

composer require nette/bootstrap

そして Configurator クラスのインスタンスを作ります。作られる DI コンテナはディスクに蓄えられるので、それを保存するディレクトリへのパスを設定する必要があります。

$configurator = new Nette\Bootstrap\Configurator;
$configurator->setTempDirectory(__DIR__ . '/temp');

Linux や macOS では、temp/ のディレクトリに書き込みの権限を与えてください。

ではいよいよ設定ファイルそのものです。addConfig() で読み込みます。

$configurator->addConfig(__DIR__ . '/database.neon');

設定ファイルをもっと足したいなら、addConfig() の関数を何度でも呼べます。ファイルに同じキーの要素が現れると、それは上書きされます(配列の場合は併合されます)。あとから足したファイルのほうが、前のものより優先されます。

最後の一歩は DI コンテナを作ることです。

$container = $configurator->createContainer();

これで望むオブジェクトが作られます。たとえば Nette Databaseの設定を使っているなら、データベース接続を作ってもらえます。

$db = $container->getByType(Nette\Database\Connection::class);
// または
$explorer = $container->getByType(Nette\Database\Explorer::class);
// あるいは複数の接続を作る場合
$db = $container->getByName('database.main.connection');

これでデータベースを扱えます。

開発モードと本番モード

開発モードでは、設定ファイルが変わるたびにコンテナが自動的に更新されます。本番モードでは一度だけ作られ、変更は確かめられません。ですから開発モードはプログラマーの心地よさを最大にすることを、本番モードは性能と本番への配置を目指しています。

モードの選択は自動の判別で行われるので、ふつうは何かを設定したり手で切り替えたりする必要はありません。アプリケーションが localhost(つまり IP アドレス 127.0.0.1 または ::1)で動いていて、プロキシ(つまりその HTTP ヘッダー)がないときが開発モードです。そうでなければ本番モードで動きます。

たとえば特定の IP アドレスからアクセスするプログラマーのように、ほかの場合にも開発モードを有効にしたいなら、setDebugMode() を使います。

$configurator->setDebugMode('23.75.345.200');
// IP アドレスの配列も指定できます

IP アドレスとクッキーを組み合わせることを強くおすすめします。nette-debug のクッキーに秘密のトークン、たとえば secret1234 を入れておきます。こうすれば、そのトークンをクッキーに持つ、特定の IP アドレスからアクセスするプログラマーにだけ開発モードを有効にできます。

$configurator->setDebugMode('secret1234@23.75.345.200');

localhost も含めて、開発モードを完全に切ることもできます。

$configurator->setDebugMode(false);

パラメータ

設定ファイルではパラメータも使えます。それは parameters の区画で定めます。

addDynamicParameters() メソッドで外から入れることもできます。

$configurator->addDynamicParameters([
	'remoteIp' => $_SERVER['REMOTE_ADDR'],
]);

remoteIp のパラメータは、設定の中で %remoteIp% の書き方で参照できます。

新しい版へ上げるなら、アップグレードのページをご覧ください。