oo php中的新控制器

时间:2010-04-29 10:05:42

标签: php zend-framework

我有一个实际的疑问,

我正在使用OO php,我是新手。我正在使用zend框架来清楚。

我正在编写控制器(类)和动作(方法),其中包括具有所有单个mysql表相关动作的PatientMapper.php和具有所有setter和getter函数的Patient.php。

我怀疑我什么时候应该写一个新的控制器。

  1. 我应该为单个mysql表上的所有操作编写一个控制器。

  2. 或单个控制器,用于与模块相关的所有操作。

5 个答案:

答案 0 :(得分:3)

与之前的答案相反,我会说你的控制器不应该与你的数据库相关。

控制器不处理业务逻辑,你的模型可以。

除此之外,您还可以为每个实体编写一个控制器。

用户是一个实体,可以包装在控制器中,即使它依赖于几个表。 如果你的控制器变得越来越大,你可以切换到模块(Zend Framework术语)并创建一个User模块,它有一个Account控制器等......

答案 1 :(得分:1)

我认为你应该为单个mysql表编写控制器,因为如果你的应用程序会长大,你可以用几千个行控制器结束。

答案 2 :(得分:1)

控制器将概念上属于某种程度的动作分组。控制器可能仅使用一个特定的模型类(不一定是数据库访问类),但它也可能使用其中的许多类。

重要的是,控制器不应包含模型类的逻辑。控制器的唯一责任是接收和委派输入,以允许用户使用您的应用程序进行模型的特定交互。在基于web的MVC中,通常还负责根据操作结果更新View。

在MVC中必须要理解的最重要的区别是,当V和C属于一个时,M应该能够独立生存。 V和C只是您应用程序的UI,他们不应该做任何事情。基本上,你的M是你的应用程序,而你的VC就是它的顶层。 应该是M | VC imho

话虽如此,如果您认为您的应用程序可以使用单个Controller,那么请使用单个appController。但是一旦你发现自己添加了可以在概念上适合单独控制器的动作,那么添加一个新的控制器。如果您的应用程序是一个简单的CRUD应用程序,那么每个数据库表有一个控制器。如果它做了其他事情,那么给它一些适合该场景的东西。

答案 3 :(得分:0)

恕我直言,我会建议每个与mysql表相关的动作 为了可维护性。这些只是为该表调用模型的轻量级动作

答案 4 :(得分:0)

@gordon - 是的,我的应用程序是一个CRUD应用程序。所以我需要为每张桌子创建一个模型。这是最受欢迎的礼仪方式。是的,我对控制器有点清楚..

我有一个页面,我需要3个表中的数据。所以我需要调用所有3种模型方法来获取数据...

我有一个小疑问...我在课程开始时使用这样的代码。这是由其他开发人员编写的....我正在使用它...我发现很难使用连接,bcos这是锁定DB ..有关如何在这里使用连接的任何帮助

 protected $_dbTable;

    public function setDbTable($dbTable)
    {
        if (is_string($dbTable)) {
            $dbTable = new $dbTable();
        }
        if (!$dbTable instanceof Zend_Db_Table_Abstract) {
            throw new Exception('Invalid table data gateway provided');
        }
        $this->_dbTable = $dbTable;
        return $this;
    }

    public function getDbTable()
    {
        if (null === $this->_dbTable) {
            $this->setDbTable('Application_Model_DbTable_Appointment');
        }
        return $this->_dbTable;
    }

这是选择部分..无法使用连接

  $select = $this->getDbTable()->select()
                        ->from("patient_appointment",array('pa_pd_patient_id',
                                'DATE_FORMAT(pa_datetime,"%h:%i %p") as pa_time','pa_datetime','pa_um_id'
                                ,'pa_created_date','pa_mode','pa_type'))
                        ->where('date(pa_datetime) = ?', $date)
                        ->where('pa_pd_patient_id = ?', $patientId)
                        ->order('time(pa_datetime)');
        $resultSet = $this->getDbTable()->fetchAll($select);