Nette Documentation Preview

syntax
型システム
*****

<div class=perex>

型システムは堅牢なアプリケーションを開発するうえで欠かせません。Latte はテンプレートにも型のサポートを持ち込みます。各変数のデータ型やオブジェクト型が分かることで、次のことが可能になります。

- IDE による正確な補完([統合とプラグイン |recipes#エディタと IDE]を参照)
- 静的解析によるエラーの検出

どちらも開発の品質と快適さを大きく高めてくれます。

</div>

.[note]
宣言された型は情報提供のためのもので、現時点では Latte はそれをチェックしません。

型を使い始めるには? まず、渡されるパラメータとその型、必要なら既定値を表すテンプレートクラス(たとえば `CatalogTemplateParameters`)を作ります。

```php
class CatalogTemplateParameters
{
	public function __construct(
		public string $lang,
		/** @var ProductEntity[] */
		public array $products,
		public Address $address,
	) {}
}

$latte->render('template.latte', new CatalogTemplateParameters(
	address: $userAddress,
	lang: $settings->getLanguage(),
	products: $entityManager->getRepository('Product')->findAll(),
));
```

次に、テンプレートの先頭に `{templateType}` タグを名前空間を含む完全なクラス名とともに書きます。これで、テンプレートには変数 `$lang`、`$products`、`$address` が型付きで存在することが定義されます。ローカル変数の型は [`{var}` |tags#var-default]、`{varType}`、[`{define}` |template-inheritance#Definitions] タグでも指定できます。

これ以降、IDE は正しく補完を提供できるようになります。

手間を省くには? テンプレートパラメータのクラスや `{varType}` タグを書く一番簡単な方法は何でしょう。生成させてしまうのです。そのためにあるのが `{templatePrint}` と `{varPrint}` のタグのペアです。テンプレートに置くと、通常のレンダリングの代わりにクラスコードの案や `{varType}` タグの一覧が表示されます。あとはワンクリックでコードを選択してプロジェクトにコピーするだけです。


`{templateType}`
----------------
テンプレートに渡されるパラメータの型は、クラスを使って宣言します。

```latte
{templateType MyApp\CatalogTemplateParameters}
```


`{varType}`
-----------
変数の型を宣言するには? 既存の変数には `{varType}` タグ、あるいは [`{var}` |tags#var-default] を使います。

```latte
{varType Nette\Security\User $user}
{varType string $lang}
```


`{templatePrint}`
-----------------
クラスは `{templatePrint}` タグで生成させることもできます。テンプレートの先頭に置くと、通常のレンダリングの代わりにクラスコードの案が表示されます。あとはワンクリックでコードを選択してプロジェクトにコピーするだけです。`{templatePrint ParentClass}` のように親クラス名を指定すると、生成されるクラスがそれを継承します。


`{varPrint}`
------------
`{varPrint}` タグは記述の手間を省いてくれます。テンプレートに置くと、通常のレンダリングの代わりに、ローカル変数に対する `{varType}` タグの案が表示されます。あとはワンクリックでコードを選択してテンプレートにコピーするだけです。

`{varPrint}` 単体では、テンプレートパラメータではないローカル変数だけを一覧します。すべての変数を一覧したい場合は `{varPrint all}` を使います。

型システム

型システムは堅牢なアプリケーションを開発するうえで欠かせません。Latte はテンプレートにも型のサポートを持ち込みます。各変数のデータ型やオブジェクト型が分かることで、次のことが可能になります。

どちらも開発の品質と快適さを大きく高めてくれます。

宣言された型は情報提供のためのもので、現時点では Latte はそれをチェックしません。

型を使い始めるには? まず、渡されるパラメータとその型、必要なら既定値を表すテンプレートクラス(たとえば CatalogTemplateParameters)を作ります。

class CatalogTemplateParameters
{
	public function __construct(
		public string $lang,
		/** @var ProductEntity[] */
		public array $products,
		public Address $address,
	) {}
}

$latte->render('template.latte', new CatalogTemplateParameters(
	address: $userAddress,
	lang: $settings->getLanguage(),
	products: $entityManager->getRepository('Product')->findAll(),
));

次に、テンプレートの先頭に {templateType} タグを名前空間を含む完全なクラス名とともに書きます。これで、テンプレートには変数 $lang$products$address が型付きで存在することが定義されます。ローカル変数の型は {var}{varType}{define} タグでも指定できます。

これ以降、IDE は正しく補完を提供できるようになります。

手間を省くには? テンプレートパラメータのクラスや {varType} タグを書く一番簡単な方法は何でしょう。生成させてしまうのです。そのためにあるのが {templatePrint}{varPrint} のタグのペアです。テンプレートに置くと、通常のレンダリングの代わりにクラスコードの案や {varType} タグの一覧が表示されます。あとはワンクリックでコードを選択してプロジェクトにコピーするだけです。

{templateType}

テンプレートに渡されるパラメータの型は、クラスを使って宣言します。

{templateType MyApp\CatalogTemplateParameters}

{varType}

変数の型を宣言するには? 既存の変数には {varType} タグ、あるいは {var} を使います。

{varType Nette\Security\User $user}
{varType string $lang}

{templatePrint}

クラスは {templatePrint} タグで生成させることもできます。テンプレートの先頭に置くと、通常のレンダリングの代わりにクラスコードの案が表示されます。あとはワンクリックでコードを選択してプロジェクトにコピーするだけです。{templatePrint ParentClass} のように親クラス名を指定すると、生成されるクラスがそれを継承します。

{varPrint}

{varPrint} タグは記述の手間を省いてくれます。テンプレートに置くと、通常のレンダリングの代わりに、ローカル変数に対する {varType} タグの案が表示されます。あとはワンクリックでコードを選択してテンプレートにコピーするだけです。

{varPrint} 単体では、テンプレートパラメータではないローカル変数だけを一覧します。すべての変数を一覧したい場合は {varPrint all} を使います。