質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2427閲覧

テンプレートエンジンを使わない方が良いのでしょうか?

mitsuru793

総合スコア157

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/09/18 06:51

言語: 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}

テンプレートエンジンを使わないほうがメリットが大きい理由はありますでしょうか?
他の方はどうしているか、意見をいただきたいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

はっきり言って、このPlatesという「テンプレートエンジン」は、わざわざ入れるほどの理由はないと思います。

PHP自体がHTMLのテンプレートとして扱えることもあって、PHPで動く他のテンプレートエンジンは、以下のような短縮記法を使っていることが多いです。

  • TwigやSmartyのような、変数やループの略記法
  • HAMLのような、HTMLの略記法

これらの新しい記法は、それぞれ慣れるまでにコストがかかりますが、慣れれば速く書ける、という点でメリットがあります。


あと、CodeIgniterやCakePHPなど、PHP製のフレームワークは、「テンプレートエンジン」と銘打つことはないにしてもビューは別ファイルとなっています。これは、設定より規約の思想で、コントローラーのメソッド名とビューのファイル名を一対一対応させることで、対応は自明となります。

投稿2017/09/18 07:08

maisumakun

総合スコア145123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mitsuru793

2017/09/18 07:25

ご回答ありがとうございます。 最初は、既存のレガシーコードをPHPのままテンプレートファイルに移せるものとしてplatesを使いました。 テンプレートエンジンとしては最低限の機能しか無いと思います。 次に使うならpugやbladeがいいかなと考えてます。 今FWだとViewは分かれていますよね。分かれていないのを知らないので、分けないほうがメリットがあるのかを知りたかったです。(テンプレートエンジンを採用しないほうがいい理由) テンプレートエンジンを使わないまま、ビジネスロジックとviewが相互に入れくんだものは良い気がしません。 > 設定より規約の思想で railsのvimプラグインだと、このおかげですぐに対応ファイルを開くことができました。 規約の方がxmlなどをたくさん書いたりする必要がなく便利です。
guest

0

ベストアンサー

人によっては以下のPHP記法でシンプルなので十分という事もありますが、

<?= $data ?>

テンプレートエンジンを使い、間に処理を挟む事でエスケープ処理等を確実に吸収してくれる役割を果たす利点はあるかと思います。

投稿2017/09/18 07:39

aro10

総合スコア4106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mitsuru793

2017/09/18 08:17

ご回答ありがとうございます。 テンプレートの継承ができるのも便利ですよね。
aro10

2017/09/18 08:29 編集

CakePHP2の頃に、最初からテンプレートエンジンがついていないのでViewはPHPのままで書けば良いと言う人も結構いたので、結局は企業文化次第ですね。 メンテナンス性が特に上がるケースで無いならば、プロジェクトやチームに合わせるのが無難かと思います。 テンプレートの継承や親テンプレートに後から子テンプレートでデータを差し込む機能等は構造として便利です。 LaravelのBladeを使っていますが、補完や定義はIDEの検索が賢いので困ると思った事は特にありません。
mitsuru793

2017/09/26 13:16

返信が遅れてしまいました???? Bladeだと補完が効くのですね。継承については、PHPコードのままでもクラスを組み合わせて、テンプレートメソッドのような感じで作れるなと思いました。 > PHPのままで書けば良いと言う人も結構いたので、結局は企業文化次第ですね。 はい、そのとおりだと思います。テンプレートを使わないにしても、ロジックとview部分の混同はなるべく避けたいなと思います。 意見を頂き参考になりました。実際に意見を聞けて良かったです。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問