Nette Documentation Preview

syntax
アプリケーションの設定
***********

.[perex]
Nette Application の設定オプションの概要です。


Application
===========

```neon
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 つ定義できます。

```neon
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 |creating-links#不正なリンク]の設定でも変えられます。

[別名を使うと |creating-links#別名]、よく使うプレゼンターを簡単に参照できます。

[mapping は規則を定義し |directory-structure#プレゼンターのマッピング]、プレゼンター名からクラス名が導かれます。


プレゼンターの自動登録
-----------

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

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

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

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

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

```neon
application:
	scanDirs!:
		- %vendorDir%/mymodule
```

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


Latte テンプレート
============

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

```neon
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:extending-latte#Latte Extension]は次のように追加できます。

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


ルーティング
======

基本の設定です。

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

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

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

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


定数
===

PHP の定数を作ります。

```neon
constants:
	Foobar: 'baz'
```

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

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


PHP
===

PHP のディレクティブの設定です。すべてのディレクティブの一覧は [php.net |https://www.php.net/manual/en/ini.list.php]にあります。

```neon
php:
	date.timezone: Europe/Prague
```


DI サービス
=======

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

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

アプリケーションの設定

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のファクトリ