我试图理解Zend框架和数据库之间的通信实际上是如何工作的(但它看起来并不那么容易;)。
我主要关注Zend_Http_Client_Adapter_Socket类,尤其是read()函数。它以某种神奇的方式接收来自数据库的响应并设置答案的状态。但是我无法确定实际数据处理的位置。如果我想控制数据库返回的代码怎么办? F.E.我希望数据库在某些特殊情况下返回204,具体取决于数据。哪里可以做到? 我看到套接字通过等待每个其他请求/响应来启用通信。但是在数据库方面它究竟在哪里完成?
答案 0 :(得分:3)
我认为你应该更多地关注Zend_Dd_Adapter作为评论部分提到的RockyFord。 当我使用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
或者在这里问:)
答案 1 :(得分:2)
哪里可以做到?我看到套接字可以实现通信 等待彼此的请求/回复。但到底是哪里 在数据库方面做了什么?
您的问题实际上不适用于与数据库相关的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
返回响应。