アプリケーションの設定
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のファクトリ |