Zend DB:Table和Row类之间的代理?

时间:2011-06-06 05:26:05

标签: php zend-framework

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以防止意外使用?

我好奇......谢谢......

2 个答案:

答案 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方法。这将确保无论删除请求来自何处,都将执行您的自定义删除逻辑。