0

フロントコントローラーを使用して、質問のある一連のページをユーザーに送信しています。ページ、質問、およびその他すべてが管理インターフェイスで設定され、データベースに保存されるため、ほとんどすべてが動的である必要があります。

セッションに一意の識別子を保存し、ユーザーが現在いるページをデータベースに保存することで、データベースを介したユーザーの進行状況を追跡しているため、次のページに送信することができます。

問題は、チェックする特別なケースがたくさんあるということです。現在、コントローラーの長さは 300 行を超えており、コードの書き方も不十分で、私が書きました。さらに、今後数週間のうちに、ユーザー生成コンテンツや、ユーザーの出身地に応じて表示するさまざまなページなど、このシステムにさらに多くの機能を追加する必要があります。

このコントローラーは、うまく整理しないとあっという間にぐちゃぐちゃになってしまうのが分かります。

これをリファクタリングするための良い方法やアイデアは何ですか?

4

1 に答える 1

2

一般に、URLを使用して、クライアントに送信する内容を決定する方が簡単です。質問がを介して送信された<form>場合、回答を保存したら、次の質問へのリダイレクトを返すことができます。たとえば、これがあなたの質問の1つだった場合:

<form action="/questions/14" method="post">...

これはに送信さ/questions/14れ、回答を保存したら、質問15にリダイレクトできます。

header('Location: /questions/15');
exit;

URLを配置したら、フロントコントローラーを各質問に関連する部分に分割できます。次に、必要なのはルーティングだけです。

if(preg_match('/\/questions\/([0-9]+)/',$_SERVER['REQUEST_URI'],$matches) > 0) 
{
    $question_num = (int)$matches[1];
    if(!in_array($question_num, $valid_questions)) {
        // return 404
    }

    $controller_name = 'Question_' . $question_num;
    return new $controller_name; 
} 
else // check for urls that aren't questions ...
于 2009-09-17T02:31:39.733 に答える