質問: 言語: PHP 7.1 ここでのエンジンはPHPそのものではなく、外部ライブラリのことです。 下記はleague/platesのサンプルコードです。 ``` render('profile', ['name' => 'Jonathan']); ``` テンプレートファイルを使うと、メソッドではなくパスで指定することになります。 この時、下記のデメリットがあると指摘を受けました。 + IDEの補完が効かない。 各テンプレートはメソッドではなく、テンプレートファイルで定義されているので補完が効きません。 + IDEでテンプレートファイルにジャンプできない。 メソッドだと定義元へジャンプできますが、テンプレートだとジャンプが出来ません。 + テンプレートファイル内で使われる変数を事前に定義できないため、型も事前に使えない。 + 上記理由によりコードレビューがしずらい。 ### 補完・ジャンプ 人気のFWなら、IDEにプラグインがあると思います。 ない場合は、ファイルのあいまい検索で開くことになると思いました。 他にも良い方法があれば教えて頂きたいです。 ### テンプレートファイル内で使われる変数を事前に定義できないため、型も事前に使えない。 コンストラクタやメソッドだと引数で明示的に、必要な値が分かるのですがテンプレートだと分かりません。 使われる変数はテンプレートファイルの先頭のコメントで記載するのでしょうか? ### レビューがしずらい 現在は下記のように、viewをメソッドに記述しインサートする形になっています。 私はこの手法より、テンプレートエンジンを使いlayoutを指定して入れ子にする方が分かりやすいです。 そうすれば、アクションメソッドからはテンプレートファイルを1つ指定するだけで良くなります。 ``` view->header($data1); $this->view->contentsStart($data2, $data3); // ビジネスロジック $this->view->home($data4, $data5, $data6); $this->view->contentsEnd(); $this->view->contentsFooter(); // ビジネスロジック return; } // テンプレートファイルを使うパターン public function actionMethod() { // ビジネスロジック // ここでの$dataは連想配列です。 $this->renderView('home', $data); return; } ``` テンプレートエンジンを使わないほうがメリットが大きい理由はありますでしょうか? 他の方はどうしているか、意見をいただきたいです。 よろしくお願いします。
回答: はっきり言って、このPlatesという「テンプレートエンジン」は、わざわざ入れるほどの理由はないと思います。 PHP自体がHTMLのテンプレートとして扱えることもあって、PHPで動く他のテンプレートエンジンは、以下のような短縮記法を使っていることが多いです。 * TwigやSmartyのような、変数やループの略記法 * HAMLのような、HTMLの略記法 これらの新しい記法は、それぞれ慣れるまでにコストがかかりますが、慣れれば速く書ける、という点でメリットがあります。 あと、CodeIgniterやCakePHPなど、PHP製のフレームワークは、「テンプレートエンジン」と銘打つことはないにしてもビューは別ファイルとなっています。これは、**設定より規約**の思想で、コントローラーのメソッド名とビューのファイル名を一対一対応させることで、対応は自明となります。