扩展zend db select

时间:2011-09-17 14:00:20

标签: php zend-framework zend-db zend-db-table zend-db-select

我正在建立一个CMS类型的网站,会有很多管理员用户。 ACL已用于业务层。但现在我们想要将自定义ACL逻辑应用于基于admin用户所在城市的模型。

例如: 管理员用户来自纽约。他可以查看与纽约市相关的内容。

我在模型中使用Zend_Db_Select构建了很多查询。现在我已经在各处更改了查询。有没有办法,我可以添加逻辑 - > where('u.city_id =?',$ admin_user_city_id) 对于每个查询。

提前致谢。

由于 VENU

1 个答案:

答案 0 :(得分:2)

我认为您可能不需要扩展Zend_Db_Table_Select。只需将Zend_Db_Table_Abstract扩展为My_Db_Table_Abstract所有模型也将延伸,您就可以实现所需要的功能。在该抽象类中,您将扩展返回select()的默认Zend_Db_Table_Select,并在返回之前,只需将where子句添加到其中。

因此,每当你用$myModel -> select()调用一个select时,它就会包含你的where子句。

abstract class My_Db_Table_Abstract extends Zend_Db_Table_Abstract
{
    public function select($withFromPart = self::SELECT_WITHOUT_FROM_PART)
    {
        $select = parent::select($withFromPart);
        # Retreive $admin_user_city_id
        $select -> where('u.city_id = ?', $admin_user_city_id);
        return $select;
    }
}

当然,这也意味着您已经根据您所在的模型在某个地方与u表格进行了正确的连接。