言語: PHP 7.1
ここでのエンジンはPHPそのものではなく、外部ライブラリのことです。
下記はleague/platesのサンプルコードです。
php
1<?php 2// Create new Plates instance 3$templates = new League\Plates\Engine('/path/to/templates'); 4 5// Render a template 6echo $templates->render('profile', ['name' => 'Jonathan']);
テンプレートファイルを使うと、メソッドではなくパスで指定することになります。
この時、下記のデメリットがあると指摘を受けました。
- IDEの補完が効かない。
各テンプレートはメソッドではなく、テンプレートファイルで定義されているので補完が効きません。 - IDEでテンプレートファイルにジャンプできない。
メソッドだと定義元へジャンプできますが、テンプレートだとジャンプが出来ません。 - テンプレートファイル内で使われる変数を事前に定義できないため、型も事前に使えない。
- 上記理由によりコードレビューがしずらい。
補完・ジャンプ
人気のFWなら、IDEにプラグインがあると思います。
ない場合は、ファイルのあいまい検索で開くことになると思いました。
他にも良い方法があれば教えて頂きたいです。
テンプレートファイル内で使われる変数を事前に定義できないため、型も事前に使えない。
コンストラクタやメソッドだと引数で明示的に、必要な値が分かるのですがテンプレートだと分かりません。
使われる変数はテンプレートファイルの先頭のコメントで記載するのでしょうか?
レビューがしずらい
現在は下記のように、viewをメソッドに記述しインサートする形になっています。
私はこの手法より、テンプレートエンジンを使いlayoutを指定して入れ子にする方が分かりやすいです。
そうすれば、アクションメソッドからはテンプレートファイルを1つ指定するだけで良くなります。
php
1<?php 2 3// メソッドに直接Viewを記述するパターン 4public function actionMethod() 5{ 6 // Viewクラスに必要なレンダリングメソッドを定義しています。 7 // 各レンダリングメソッドに必要なデータを引数で渡します。 8 9 // ビジネスロジック 10 $this->view->header($data1); 11 $this->view->contentsStart($data2, $data3); 12 // ビジネスロジック 13 $this->view->home($data4, $data5, $data6); 14 $this->view->contentsEnd(); 15 $this->view->contentsFooter(); 16 // ビジネスロジック 17 return; 18} 19 20// テンプレートファイルを使うパターン 21public function actionMethod() 22{ 23 // ビジネスロジック 24 // ここでの$dataは連想配列です。 25 $this->renderView('home', $data); 26 return; 27}
テンプレートエンジンを使わないほうがメリットが大きい理由はありますでしょうか?
他の方はどうしているか、意見をいただきたいです。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/18 07:25