型システム
型システムは堅牢なアプリケーションを開発するうえで欠かせません。Latte はテンプレートにも型のサポートを持ち込みます。各変数のデータ型やオブジェクト型が分かることで、次のことが可能になります。
- IDE による正確な補完(統合とプラグインを参照)
- 静的解析によるエラーの検出
どちらも開発の品質と快適さを大きく高めてくれます。
宣言された型は情報提供のためのもので、現時点では 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} を使います。