php - 我的 PHP Controller 的结构是否错误?代码放错地方了

标签 php mysql model-view-controller

我对 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/

相关文章:

mysql - 我的正则表达式模式有什么问题?

model-view-controller - 在 SQLAlchemy 中记录模型

PHP session 过期但页面刷新后我没有重定向

PHP-shoutbox 接受 php 标签或 html 标签作为文本而不是代码

php - Mysql查询通过其id从其他表中获取所有列及其子内容

php - Woocommerce 迷你购物车无法在我的自定义主题上正确显示

c# - VS 2012 在错误的线程上中断

php - 如何从随机位生成一个范围内的整数

mysql - Vagrant MySQL 访问

php - 防止 SQL 注入(inject) - PHP 程序