型システム

型システムは堅牢なアプリケーションを開発するうえで欠かせません。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} を使います。

バージョン: 3.x