0

我正在使用前端控制器向用户发送一系列带有问题的页面。几乎所有内容都必须是动态的,因为页面、问题和其他所有内容都在管理界面中设置并存储在数据库中。

我通过在会话中存储唯一标识符并将用户所在的当前页面存储在数据库中来跟踪用户在数据库中的进度,以便我可以找出将它们发送到的下一页。

问题是,有很多特殊情况需要检查。现在控制器有 300 多行,代码写得不好,我是写它的人。另外,在接下来的几周内,我将需要向该系统添加更多内容,例如用户生成的内容和根据用户来自何处显示的不同页面。

我可以看到,如果我组织不好,这个控制器很快就会变得一团糟。

有什么好的方法或想法来重构它?

4

1 回答 1

2

通常,使用 URL 来确定应该发送给客户端的内容更容易。如果您的问题是通过 a 提交的,<form>您可以在保存答案后将重定向返回到下一个问题。例如,如果这是您的问题之一:

<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 回答