設定ファイルの読み込み方法

Nette の個々のコンポーネントは設定ファイルを使用して設定します。これらのファイルを読み込む方法を示します。

フレームワーク全体を使用している場合、追加の作業は必要ありません。プロジェクトには設定ファイル用の config/ ディレクトリが用意されており、それらの読み込みはアプリケーションブートローダーが担当します。 この記事は、Nette のライブラリを 1 つだけ使用し、設定ファイルの機能を利用したいユーザー向けです。

設定ファイルは通常NEON 形式で記述され、サポートされているエディタで編集するのが最適です。これらはオブジェクトを作成および設定する方法の指示として理解できます。したがって、設定の読み込み結果はいわゆるファクトリであり、これはリクエストに応じて使用したい他のオブジェクト(データベース接続など)を作成するオブジェクトです。

このファクトリは依存関係注入コンテナ(DI コンテナ)とも呼ばれ、詳細に興味がある場合は依存関係注入に関する章をお読みください。

設定の読み込みとコンテナの作成は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');

これでデータベースを操作できます!

開発モード vs プロダクションモード

開発モードでは、設定ファイルが変更されるたびにコンテナが自動的に更新されます。プロダクションモードでは、一度だけ生成され、変更はチェックされません。 したがって、開発モードはプログラマの最大限の利便性に焦点を当てており、プロダクションモードはパフォーマンスと本番展開に焦点を当てています。

モードの選択は自動検出によって行われるため、通常は何も設定したり手動で切り替えたりする必要はありません。アプリケーションがlocalhost(つまりIPアドレス 127.0.0.1 または ::1)で実行され、プロキシが存在しない(つまりそのHTTPヘッダーがない)場合、モードは開発モードになります。それ以外の場合はプロダクションモードで実行されます。

特定のIPアドレスからアクセスするプログラマなど、他の場合に開発モードを有効にしたい場合は、setDebugMode() を使用します:

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

IPアドレスとCookieを組み合わせることを強くお勧めします。nette-debug Cookieに秘密のトークン(例:secret1234)を保存し、この方法で特定のIPアドレスからアクセスし、かつCookieに言及されたトークンを持つプログラマに対して開発モードを有効にします:

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

localhostに対しても、開発モードを完全に無効にすることもできます:

$configurator->setDebugMode(false);

パラメータ

設定ファイルでは、parameters セクションで定義されるパラメータも使用できます。

これらは addDynamicParameters() メソッドを使用して外部から挿入することもできます:

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

パラメータ projectId は、設定内で %projectId% と記述することで参照できます。

バージョン: 3.x