Nette Documentation Preview

syntax
型システム
*****

<div class=perex>

型システムは堅牢なアプリケーション開発の鍵となります。Latteはテンプレートにも型サポートを導入します。各変数にどのようなデータ型またはオブジェクト型が含まれているかがわかるため、以下のことが可能になります。

- IDEが正しく補完する([統合 |recipes#エディタとIDE]を参照)
- 静的解析でエラーを検出する

これらは両方とも、開発の品質と快適さを大幅に向上させます。

</div>

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

型の使用を開始するにはどうすればよいですか?渡されるパラメータ、その型、そして場合によってはデフォルト値を表すテンプレートクラス、例えば `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}` という2つのタグが存在します。これらをテンプレートに配置すると、通常のレンダリングの代わりに、クラスコードの提案または `{varType}` タグのリストが表示されます。その後、コードをワンクリックで選択し、プロジェクトにコピーするだけです。


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

```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はテンプレートにも型サポートを導入します。各変数にどのようなデータ型またはオブジェクト型が含まれているかがわかるため、以下のことが可能になります。

  • IDEが正しく補完する(統合を参照)
  • 静的解析でエラーを検出する

これらは両方とも、開発の品質と快適さを大幅に向上させます。

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

型の使用を開始するにはどうすればよいですか?渡されるパラメータ、その型、そして場合によってはデフォルト値を表すテンプレートクラス、例えば 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} という2つのタグが存在します。これらをテンプレートに配置すると、通常のレンダリングの代わりに、クラスコードの提案または {varType} タグのリストが表示されます。その後、コードをワンクリックで選択し、プロジェクトにコピーするだけです。

{templateType}

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

{templateType MyApp\CatalogTemplateParameters}

{varType}

変数の型を宣言するにはどうすればよいですか?そのために、既存の変数には {varType} タグ、または {var} タグを使用します。

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

{templatePrint}

{templatePrint} タグを使用してクラスを生成させることもできます。これをテンプレートの先頭に配置すると、通常のレンダリングの代わりにクラスの提案が表示されます。その後、コードをワンクリックで選択し、プロジェクトにコピーするだけです。

{varPrint}

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

{varPrint} 自体は、テンプレートパラメータではないローカル変数のみを出力します。すべての変数を出力したい場合は、{varPrint all} を使用してください。