アプリケーションの設定

Nette Application の設定オプションの概要です。

Application

application:
	# Tracy の BlueScreen に「Nette Application」パネルを表示しますか?
	debugger: ...           # (bool) Tracy が使えれば有効

	# 本番では例外は常に error-presenter が扱います。
	# このオプションは開発モードでもその振る舞いを有効にするだけです
	catchExceptions: ...    # (bool) 既定は false。つまり開発では無効、本番では常に有効

	# error-presenter の名前
	errorPresenter: Error   # (string|array) 既定は 'Nette:Error'

	# プレゼンターとアクションの別名を定義します
	aliases: ...

	# プレゼンター名をクラスに変換する規則を定義します
	mapping: ...

	# 不正なリンクの警告を抑制しますか?
	# 開発モードでのみ有効です
	silentLinks: ...        # (bool) 既定は false

nette/application のバージョン 3.2 以降、エラー用のプレゼンターを 2 つ定義できます。

application:
	errorPresenter:
		4xx: Error4xx   # Nette\Application\BadRequestException 用
		5xx: Error5xx   # そのほかの例外用

分けると便利なのは、この 2 つの状況が根本的に異なるからです。BadRequestException(4xx のコード)は、アプリケーションは正常で、訪問者が存在しないものを求めただけであることを意味します。ですからサイトのレイアウトの中で親切なメッセージを出す、機能の揃ったプレゼンターを使えます。逆に 5xx のエラーは、アプリケーションの何かが壊れていて、それが何かは分からないことを意味します。5xx のプレゼンターは、描画中にほかの何かが失敗しないよう、できるだけ最小限に保ってください。理想としては、データベースにもレイアウトにもログイン中のユーザーにも触れないことです。

silentLinks オプションは、開発モードでリンクの生成が失敗したとき(たとえばプレゼンターが存在しないときなど)に Nette がどう振る舞うかを決めます。既定値の false は、Nette が E_USER_WARNING のエラーを出すことを意味します。true にするとこのエラーメッセージが抑制されます。本番環境では常に E_USER_WARNING が出ます。この振る舞いは、プレゼンターの変数 $invalidLinkModeの設定でも変えられます。

別名を使うと、よく使うプレゼンターを簡単に参照できます。

mapping は規則を定義し、プレゼンター名からクラス名が導かれます。

プレゼンターの自動登録

Nette はプレゼンターをサービスとして DI コンテナに自動的に追加し、その生成を大きく速くします。Nette がプレゼンターをどう探すかは設定できます。

application:
	# Composer のクラスマップでプレゼンターを探しますか?
	scanComposer: ...      # (bool) 既定は true

	# クラス名とファイル名が一致すべきマスク
	scanFilter: ...        # (string) 既定は '*Presenter'

	# どのディレクトリでプレゼンターを探しますか?
	scanDirs:              # (string[]|false) 既定は '%appDir%'
		- %vendorDir%/mymodule

scanDirs に並べたディレクトリは既定値 %appDir% を上書きせず、それを補うので、scanDirs には %appDir%%vendorDir%/mymodule の両方のパスが入ります。既定のディレクトリを外したい場合は感嘆符を使います。

application:
	scanDirs!:
		- %vendorDir%/mymodule

値を false にすると、ディレクトリの走査を無効にできます。するとプレゼンターはサービスとして登録されなくなるので、decoratorセクションで調整できなくなり、生成も遅くなります。ですから自動登録を完全に抑えることはおすすめしません。アプリケーションの性能が落ちるからです。

Latte テンプレート

この設定は、コンポーネントとプレゼンターにおける Latte の振る舞いに全体として影響します。

latte:
	# Tracy バーに Latte パネルを、主テンプレートについて表示(true)、それとも全コンポーネントについて(all)?
	debugger: ...        # (true|false|'all') Tracy が使えれば有効(デバッグモードのみ)

	# declare(strict_types=1) のヘッダー付きでテンプレートを生成します
	strictTypes: ...     # (bool) 既定は false

	# [厳格なパーサーモード |latte:develop#strict mode]を有効にします
	strictParsing: ...   # (bool) 既定は false

	# 変数のスコープをループ本体に限定します
	scopedLoopVariables: ... # (bool) 既定は false

	# ペアタグの入れ子によるインデントを取り除きます
	dedent: ...          # (bool) 既定は false

	# [生成されたコードのチェック |latte:develop#Checking Generated Code]を有効にします
	phpLinter: ...       # (string) 既定は null

	# ロケールを設定します
	locale: cs_CZ        # (string) 既定は null

	# $this->template オブジェクトのクラス
	templateClass: App\MyTemplateClass # 既定は Nette\Bridges\ApplicationLatte\DefaultTemplate

新しい拡張は次のように追加できます。

latte:
	extensions:
		- Latte\Essential\TranslatorExtension(@Nette\Localization\Translator)

ルーティング

基本の設定です。

routing:
	# Tracy バーにルーティングのパネルを表示しますか?
	debugger: ...   # (bool) Tracy が使えれば有効(デバッグモードのみ)

	# ルーターを DI コンテナにシリアライズします
	cache: ...      # (bool) 既定は false

ルーティングはふつう RouterFactoryクラスで定義します。あるいは mask: action の組を使って設定でルートを定義することもできますが、この方法はあまり柔軟ではありません。

routing:
	routes:
		'detail/<id>': Admin:Home:default
		'<presenter>/<action>': Front:Home:default

定数

PHP の定数を作ります。

constants:
	Foobar: 'baz'

Foobar 定数はアプリケーションの起動後に作られます。

定数はグローバルに使える変数の代わりにすべきではありません。オブジェクトに値を渡すには依存性注入を使ってください。

PHP

PHP のディレクティブの設定です。すべてのディレクティブの一覧は php.netにあります。

php:
	date.timezone: Europe/Prague

DI サービス

次のサービスが DI コンテナに追加されます。

名前 説明
application.application Nette\Application\Application アプリケーションの実行役
application.linkGenerator Nette\Application\LinkGenerator LinkGenerator
application.presenterFactory Nette\Application\IPresenterFactory プレゼンターのファクトリ
application.### Nette\Application\UI\Presenter 個々のプレゼンター
routing.router Nette\Routing\Router ルーター
latte.latteFactory Nette\Bridges\ApplicationLatte\LatteFactory Latte\Engine オブジェクトのファクトリ
latte.templateFactory Nette\Application\UI\TemplateFactory $this->templateのファクトリ
バージョン: 4.x