8

CakePHPアプリケーションのデフォルトのレイアウトを再フォーマットしました。ほとんどすべてをhtmlヘルパーメソッド内に配置することで、可能な限り多くのインラインhtmlを排除しました。

楽しかったですが、この演習でどのようなメリットが得られたのでしょうか。

<?php
    $output = implode("\n", array(
        $html->docType(),
        $html->tag('html', implode("\n", array(
            $html->tag('head', implode("\n", array(
                $html->charset(),
                $html->tag('title', 'Title For App'),
                $html->css('css', NULL, array('media' => 'screen,print')),
                $html->css('print', NULL, array('media' => 'print')),
                $html->script(array('cufon', 'jquery','external'))
            ))),
            $html->tag('body', implode("\n", array(
                $html->tag('div', $content_for_layout, array('id' => 'wrapper')),
                $html->scriptBlock('Cufon.now();')
            )))
        )), array('xmlns' => 'http://www.w3.org/1999/xhtml'))
    ));
    echo $output;
?>

少なくとも見た目は素晴らしくコンパクトで、かなり読みやすいと思います。このシナリオでは、どのような落とし穴に注意する必要がありますか?速度の問題に注意する必要がありますか?

私はそれが好きです—そして私は好きではありません。

どちらかと言えば説得力が必要だと思います。

不思議に思うかもしれませんが、ソースを表示するときに、インプロードはhtmlに素敵な改行を入れます。

4

5 に答える 5

10

私は数年前にGoogleグループでこの議論をしました。最終的には、プログラムで操作する必要があるまで、どちらの方法でも大きな違いはないことに気付くでしょう。その後、HTMLルートを使用すると、コードに<?php?>または文字列の連結が含まれていることがわかります。または二重引用符の変数置換。

現在、多くのアプリケーションは、マークアップよりもヘルパーを使用して維持することを好みます。

ヘルパーでカバーされていないHTMLがたくさんあるので、混合を避けることはできませんが、可能な限りヘルパーを使用することで、複雑さと混乱を最小限に抑えることができます。フォームを使い始めると、たくさんのセキュリティ関連のものが投入され、IDとNAMEがCakePHPが好む方法でフォーマットされます。

PHPCakePHPはこのために構築されています。なぜ半分の言語または半分のフレームワークしか使用しないのですか?

于 2010-07-13T08:27:10.747 に答える
8

これの紛れもない利点は、100%正しい構文です。これは、太い運指や開閉タグの欠落の可能性を排除したためです。経験から言えば、半年後、この構造を読んだり変更したりするのは2倍難しくなるでしょう。また、条件要素を挿入するのは非常に困難です。ここでは三項演算子を使用する必要があります。これにより、読みにくくなります。

全体として、従来のHTML/PHPミックスを使用することをお勧めします。

于 2010-07-13T00:19:37.550 に答える
4

個人的にはこれについて矛盾していますが、PHPを使用する場合はHTML+PHPモードを選択します。どちらの利点もわかりますが、これがHTML+PHPを選択する理由です。

  1. PHPはテンプレート言語です-最高です。テンプレート言語としては、他のどのPHPテンプレート言語よりもはるかに優れていると思います。また、他の言語のWebフレームワークのテンプレート言語の多くは、その柔軟性とパワーの点で優れています。

    PythonやJavaのような言語で作業している場合は、おそらくあなたが提案する形式を好むでしょうが、PHPで作業する場合は完璧なソリューションではありません。

  2. HTML自体を操作するためにすでに開発されている多くのツールを使用できなくなります。特に、HTMLの変更に慣れていて、ビュー自体に簡単な変更を加えることができる人を失うことになります。

  3. APIのレイヤーを追加することなく、絶対的な柔軟性を実現します。

これの副作用として、私はfor():andendfor;構文などを使用する傾向があり、HTMLタグをエコーし​​ないように努めます-それを回避するために再構築します(つまり、ヘルパーなどの内部でない限りメソッドを使用しません。その場合は、 Html Helperを使用してタグを生成します。これは、PHPクラスまたは関数の中にHTMLスープを入れるのはばかげているからです:P)。

于 2010-10-29T20:05:16.527 に答える
3

ヘルパーを使用することで、ある意味で、コードを将来にわたって利用できるようになります。したがって、HTML5が登場し、新しい仕様でhtmlorタグが変更された場合。head理論的には、htmlヘルパークラスを変更するだけで、マークアップはすべてHTML5になります。

ただし、逆に、整形式のタグを生成するためにCakeにも依存しています。これらのフレームワークの多くはフルスタックですが、必然的に、他のフレームワークよりも適切に処理できる領域がいくつかあります。HTMLタグセット全体を機能させることを期待するべきではありません。

個人的には、あなたがやったことをやるのはやり過ぎだと思います。ディレクトリマッピングの利点があるため、リンク、URL、およびインクルードファイルにHTMLヘルパーを使用するのが好きです。divただし、ヘルパーを使用して単純なタグを生成することはありません。

于 2010-07-13T00:20:27.067 に答える
1

プログラム的には、これは非常に正しいです。実際に文字列を作成することはないからです。すばらしいのは、すべてが関数であるため、あらゆる種類のパラメーターを関数に渡し、すべてのロジックをコントローラーにプッシュできることです。したがって、たとえば、タイトルをページごとに動的に生成してから、$html->tag('title', 'Title For App')呼び出しに渡すことができます。

ただし、関数呼び出しの数が非常に多いため、PHPを使用して変数をループおよびエコーアウトするだけでは、パフォーマンスが低下する可能性があります。

于 2010-07-13T00:18:06.963 に答える