Zend DB Table和Zend DB Row之间是否存在代理?例如,如果我覆盖DB_Table delete()方法仅标记已删除的记录,我是否需要在DB_Table_Row中执行相同的操作?或者行代理到表吗?
如果代理到位,它会在哪个方向发生? (表的行代理?)和哪些方法? (行delete()和save() - 到 - 表delete(),update()和insert()?)
我意识到我可以自己测试一下,但是你可能会更快(如果你还不知道答案的话......)
谢谢!
修改
问题的原因是我正在开发一些包含ACL的模型。由于我在控制器中也有ACL,我计划只覆盖DB类中的选定方法。例如,我想确保会员只能删除自己的记录。 (我想我需要使用ACL断言来执行此操作)。
所以我问上面的问题是为了确定是否必须覆盖方法对(即Table类中的一个,Row类中的一个),或者我是否可以覆盖一个。然而,根据回答判断,我现在想知道我是否提出了错误的问题。
有经验的开发人员如何应对这种情况?也许你选择只使用一种删除方法(例如来自Row类)。 (也适用于更新方法)。如果是这样,您是否覆盖Table类delete以防止意外使用?
我好奇......谢谢......
答案 0 :(得分:1)
根据我的理解,Zend_DB_Row
中的删除方法使用Zend_DB_Table
中的删除方法。因此,如果您覆盖Zend_DB_Table
中的删除,则应在Zend_DB_Row
中删除。
希望这会有所帮助。无论如何,如果情况并非如此,请告诉我。
答案 1 :(得分:1)
Zend_Db_Table_Row_Abstract的第627行
/**
* Execute the DELETE (this may throw an exception)
*/
$result = $this->_getTable()->delete($where);
获取表并执行delete方法。
Zend_Db_Table_Abstract的第1182行
return $this->_db->delete($tableSpec, $where);
这将调用Zend_Db_Adapter_Abstract :: delete()。
IMO,最好在适配器类中重写delete方法。这将确保无论删除请求来自何处,都将执行您的自定义删除逻辑。