2

私は、HTMLデザイナーがPHPメソッドを使用してコンテンツを取得するプロジェクトのために開発しています。今こそ例外を処理するときであり、HTMLをきれいで、クリーンで、セマンティックに保ち、PHPを正しく保つための問題に直面しています。

例外が発生するまで、HTMLテンプレートには次のようなものがありました。

<h2 class="title"><?php Content::getTitle() ?></h2>

ここで、例外を処理する場合は、次のように記述します。

<h2 class="title">
    <?php
    try {
        Content::getTitle();
    } catch (Exception $e) {
        echo $e->getMessage();
    }
    ?>
</h2>

これはきれいではありません。

または

<?php
try {
    // THE WHOLE TEMPLATE RENDERING!!!
} catch (Exception $e) {
    echo $e->getMessage();
}
?>

これは、問題を報告して続行する必要があるときに、例外でレンダリングを停止するため、受け入れられません。

したがって、メソッド自体の中にtry/catchのものを入れることを考えています。

class Content {

    public static function getTitle {
    try {
        if (something==happened) throw new Exception 'OMG!';
        else {
            DoTheJob();
        }
    } catch (Exception $e) {
        echo $e->getMessage();
    }

}

今のところうまくいくようですので、質問は次のとおりです。これは良い習慣ですか?より良い、より多くのDRYの選択肢はありますか?

4

2 に答える 2

1

あなたが議論しているのは、MVCの初期段階です。あなたは間違いなくあなたのテンプレートからコードログイン(例外処理)を分割したいです。適切な方法(またはもちろんそれ以上)で例外ロジックを使用することを強くお勧めします。

実際にやりたくないことは、単にエラーを出力することです。これは、一般的にユーザーを混乱させるでしょう。すでに部分的なコンテンツを出力している場合は、エラーページにリダイレクトするか、壊れたページに一般的なユーザーフレンドリーなエラーメッセージを表示するかを決定できます(既にレンダリングした量がわからない場合)。

で説明されていない例外(つまり、停止しなければならない例外)をキャッチすることも実行可能かもしれませんset_exception_handler。それは完全に乾燥しています。

于 2012-09-25T09:27:31.790 に答える
1

はい、これは問題なく健全です。これは、テンプレートビューパターンと呼ばれます。

動的Webページ[ sic ]を操作する最良の方法は、静的ページと同じように動的Webページを作成することですが、動的情報を収集するための呼び出しに解決できるマーカーを配置します。ページの静的な部分は特定の応答のテンプレートとして機能するため、これをテンプレートビューと呼びます。

詳細については、Fowler、Patterns of EnterpriseApplicationArchitectureを参照してください。

于 2012-09-25T10:29:20.050 に答える