我试图了解 Zend 框架和数据库之间的通信实际上是如何工作的(但这并不像看起来那么容易;))。
我主要关注 Zend_Http_Client_Adapter_Socket类,尤其是 read() 函数。它以某种神奇的方式接收来自数据库的响应并设置答案的状态。但是我无法发现实际数据处理在哪里完成。如果我想控制数据库返回的代码怎么办?我希望数据库在某些特殊情况下根据数据返回 204。在哪里可以做?我看到套接字通过等待彼此的请求/响应来启用通信。但是在数据库方面到底是在哪里完成的呢?
我试图了解 Zend 框架和数据库之间的通信实际上是如何工作的(但这并不像看起来那么容易;))。
我主要关注 Zend_Http_Client_Adapter_Socket类,尤其是 read() 函数。它以某种神奇的方式接收来自数据库的响应并设置答案的状态。但是我无法发现实际数据处理在哪里完成。如果我想控制数据库返回的代码怎么办?我希望数据库在某些特殊情况下根据数据返回 204。在哪里可以做?我看到套接字通过等待彼此的请求/响应来启用通信。但是在数据库方面到底是在哪里完成的呢?
我认为您应该更多地关注评论部分中提到的 RockyFord 的 Zend_Dd_Adapter。当我使用 ZF 时,我的模型分为两部分。保存数据库数据的对象和具有保存、编辑、删除、查找等方法的映射器。所以 Mapper 正在初始化一个新的 Zend_Db_Table_Abstract。例子:
class Application_Model_DbTable_Cable extends Zend_Db_Table_Abstract
{
protected $_name = "cable";
protected $_primary = "ID";
}
Zend_Db_Table_Abstract 的实例应该存储在映射器中,然后可以调用,例如:
$this->dbTable->find($id);
有关更多信息,请查看 ZF 的参考指南:Zend_Db
或者在这里问:)
在哪里可以做?我看到套接字通过等待彼此的请求/响应来启用通信。但是在数据库方面到底是在哪里完成的呢?
您的问题确实不适用于Zend_Http_Client_Adapter_Socket
与数据库有关的问题。
Zend_Http_Client_Adapter_Socket
处理http连接请求/响应周期。
Zend Framework 中的所有数据库适配器主要是PHP 扩展的包装器(模拟和/或扩展函数)。(PHP 扩展注册在 php.ini 文件中,格式为extension=extension_name
)
我们大多数人目前都在为我们最喜欢的各种数据库使用 PDO 扩展。
因此,要真正回答您的问题,您需要深入研究为 PHP 创建数据库适配器。如果你真的很好奇,你可以从http://www.php.net/manual/en/internals2.pdo.php开始。
Zend_Http_Client_Adapter_Socket
但是,您可以对控制器进行编码,以根据数据库查询的结果返回响应 。