我对 PHP MVC 还很陌生,但我并没有 100% 相信我,我正在以最合乎逻辑的方式来做这件事。这是我的一个 Controller 的一段代码。有 friend 说大部分代码应该移到模型中?是这样吗?
现在我有一个 DataAccess 层来完成所有 SQL 工作。对于用户工作,我有一个 UserDataAccess 对象,它将创建、更新和删除。看起来我正在使用类似于数据映射器模式的东西。我的模型类直接映射到给定表上的数据库列,仅此而已。
我一直对每段代码应该放在哪里感到困惑。
// Posted values passed all checks.
if(count($errors) == 0)
{
try
{
// Get a Connection.
$connection = ConnectionFactory::GetConnection('mysql');
try
{
$connection->beginTransaction();
// Create DataAccess object.
$uda = new UserDataAccess();
// Check if username and email are avail.
if(count($uda->CheckUsername($connection, $user->Username)) > 0)
$errors['username_taken'] = "Username is taken";
if(count($uda->CheckEmail($connection, $user->Email)) > 0)
$errors['email_taken'] = "Email is taken";
if(count($errors) == 0)
{
// Perform Create.
$userId = $uda->CreateUser($connection, $user->GetArray());
// Add User to Rookie Role.
$uda->AddUserToRole($connection, 1, $userId);
// Commit connection.
$connection->commit();
}
// Clear connection.
$connection = null;
// Redirect user.
if(count($errors) == 0)
header('location: /' . $user->Username);
}
catch(PDOException $e)
{
$connection->rollBack();
$errors['internal'] = "Opps: There was an error processing the request.";
}
}
catch(Exception $e)
{
$errors['internal'] = "Opps: There was an error processing the request.";
}
}
}
最佳答案
尝试将 mysql 连接完全移至模型, Controller 不应该知道您正在使用什么类型的数据库以及如何连接到它。试着这样想:
- View 仅向用户显示页面;
- Controller 通过执行计算、与模型交互和加载 View 来响应请求;
- 您应该始终能够更改任何组件,而不影响与其交互的组件;
关于php - 我的 PHP Controller 的结构是否错误?代码放错地方了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6005892/