Nette Documentation Preview

syntax
タイプシステム
*******

<div class=perex>

堅牢なアプリケーションを開発するためには、型システムが重要な役割を果たします。Latteはテンプレートに型サポートを導入しています。各変数がどのようなデータ型、オブジェクト型であるかを把握することで、より効率的な開発が可能になります。

- IDEが正しくオートコンプリートを行う([統合とプラグインを |recipes#Editors and IDE]参照)
- 静的解析によるエラーの検出

の2点が、開発の質と利便性を大きく向上させます。

</div>

.[note]
申告型は情報提供であり、ラテは現時点ではチェックしていない。

型はどのように使うのでしょうか?渡されたパラメータを表すテンプレートクラス,例えば`CatalogTemplateParameters` を作成します.

```php
class CatalogTemplateParameters
{
	public function __construct(
		public string $langs,
		/** @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}` タグを挿入します。これにより、テンプレート内に変数`$langs` と`$products` が存在し、対応する型があることが定義されます。
また、ローカル変数の型を指定するために [`{var}` |tags#var-default]`{varType}` および [`{define}` |template-inheritance#definitions].

これで、IDEが正しくオートコンプリートできるようになりました。

作業を保存するには?テンプレートクラスや`{varType}` タグをできるだけ簡単に書くにはどうしたらいいでしょうか。それらを生成させましょう。
`{templatePrint}` と`{varPrint}` というタグはまさにそれを実現するものです。
これらのタグをテンプレートに配置すると、通常のレンダリングではなく、クラスやテンプレートのコードが表示されます。そして、そのコードを選択し、プロジェクトにコピーするだけです。


`{templateType}`
----------------
テンプレートに渡されるパラメータの種類は、class.Template.Template()を使って宣言します。

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


`{varType}`
-----------
変数の型はどのように宣言するのですか?そのためには、既存の変数に対して、`{varType}` というタグを使うか、あるいは [`{var}` |tags#var-default]:

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


`{templatePrint}`
-----------------
このクラスは、`{templatePrint}` タグを使用して生成することもできます。これをテンプレートの先頭に配置すると、通常のテンプレートではなく、クラスのコードが表示されます。あとは、そのコードを選択し、プロジェクトにコピーするだけです。


`{varPrint}`
------------
`{varPrint}` タグは、あなたの時間を節約してくれます。テンプレートに配置すると、通常のレンダリングではなく、`{varType}` タグのリストが表示されます。あとは、コードを選択して、テンプレートにコピーするだけです。

`{varPrint}` は、テンプレートのパラメーターでないローカル変数をリストアップします。すべての変数をリストアップしたい場合は、`{varPrint all}` を使用します。

タイプシステム

堅牢なアプリケーションを開発するためには、型システムが重要な役割を果たします。Latteはテンプレートに型サポートを導入しています。各変数がどのようなデータ型、オブジェクト型であるかを把握することで、より効率的な開発が可能になります。

の2点が、開発の質と利便性を大きく向上させます。

申告型は情報提供であり、ラテは現時点ではチェックしていない。

型はどのように使うのでしょうか?渡されたパラメータを表すテンプレートクラス,例えばCatalogTemplateParameters を作成します.

class CatalogTemplateParameters
{
	public function __construct(
		public string $langs,
		/** @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} タグを挿入します。これにより、テンプレート内に変数$langs$products が存在し、対応する型があることが定義されます。 また、ローカル変数の型を指定するために {var}{varType} および {define}.

これで、IDEが正しくオートコンプリートできるようになりました。

作業を保存するには?テンプレートクラスや{varType} タグをできるだけ簡単に書くにはどうしたらいいでしょうか。それらを生成させましょう。 {templatePrint}{varPrint} というタグはまさにそれを実現するものです。 これらのタグをテンプレートに配置すると、通常のレンダリングではなく、クラスやテンプレートのコードが表示されます。そして、そのコードを選択し、プロジェクトにコピーするだけです。

{templateType}

テンプレートに渡されるパラメータの種類は、class.Template.Template()を使って宣言します。

{templateType MyApp\CatalogTemplateParameters}

{varType}

変数の型はどのように宣言するのですか?そのためには、既存の変数に対して、{varType} というタグを使うか、あるいは {var}:

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

{templatePrint}

このクラスは、{templatePrint} タグを使用して生成することもできます。これをテンプレートの先頭に配置すると、通常のテンプレートではなく、クラスのコードが表示されます。あとは、そのコードを選択し、プロジェクトにコピーするだけです。

{varPrint}

{varPrint} タグは、あなたの時間を節約してくれます。テンプレートに配置すると、通常のレンダリングではなく、{varType} タグのリストが表示されます。あとは、コードを選択して、テンプレートにコピーするだけです。

{varPrint} は、テンプレートのパラメーターでないローカル変数をリストアップします。すべての変数をリストアップしたい場合は、{varPrint all} を使用します。