我正在开发一个使用MVC体系结构的基本web应用程序。我正在建立自己的尝试,并充分理解MVC拱门的工作方式,因此这可以用作学习练习。在提交表单后从控制器发送数据以查看数据的最佳方式?
我使用Aura路由器类将我的URL映射到控制器和操作,以便类似mysite.com/login的内容将映射到LoginController,如果我将表单提交到mysite.com/login/login,它将映射它以LoginController-> doAction('登录')。控制器的
示例如下:
class LoginController implements iController {
public function doAction(PDO $dbh, $action) {
switch($action) {
case 'login':
//login here
$user = new User();
$user_id = FALSE;
if($user_id = $user->login($_POST['email'], $_POST['password'])) {
//save user id to session
}
else {
$results = array('errors' => array('invalid'));
MembershipFunc::redirect('/login', $results);
}
break;
case 'logout':
//logout
break;
default:
break;
}
}
}
我面对的是,为了避免人们刷新页面,并重新提交数据我的问题想向用户转发回如果登录页面登录失败。目前,如果我不转发它们,那么它们将出现在页面mysite.com/login/login上,我不认为它特别干净。这对我的简单登录表单没有问题,因为错误可能会重定向到mysite.com/login?error=email,password & [email protected],但对于巨大的表单,我会得到一个巨大的URL查询,它是真的很糟糕。
我已经搜索了很多关于MVC如何工作的基本(但有用的)PHP代码示例,并且我一直在努力寻找特别有用的东西。我应该避免将我的URL结构映射到一个动作,而是选择放置一个名为“action”的POST字段来代替?我应该以某种方式建立一个系统,让我通过SESSION数据中的数据传递这些数据?
有什么建议吗?
注:我只想指出我知道这个问题不适合SO文化,因为它可能没有正确/错误的答案,但我发现SO总是拥有最好的/最有知识的用户群。如果任何人有关于我应该在哪些方面指导这些问题的提示,我会非常感激,所以我不会添加混乱!
为什么您的控制器知道数据库连接?为什么它只有一种方法? iController是否受Apple的版权保护? – 2013-02-14 20:33:09
如果您的方法中有*开关*,则需要多种方法。 – 2013-02-14 20:35:13
我会联系我的专利代理人以确保:--P。糟糕,我无法在这些评论中添加新行。我只是传递数据库连接,所以我不必在去模型时创建一个新的连接。我在我的index.php/bootloader文件中创建了数据库,然后将它传递给控制器,并持续降低它的速度。 – Gazillion 2013-02-14 20:35:23