我正在使用Zend Framework构建一个Web界面,用于为自定义CMS的用户设置ACL - 权限。由于ACL数据分布在5个表中(用户,组,权限,url =动作+控制器,用户可以理解的良好权限名称),并且我只有一个控制器具有四个基本CRUD(创建,列表,更新,删除) )操作我想知道最好的方法是什么?
我的书中的所有示例我都看到每个模型都扩展了Zend_Db_Table_Abstract,因此代表了一个表。
我在想我必须做一个不扩展zend_db_table_abstract的模型,然后手工编写我需要的查询,从而仅将自己限制在mysql数据库中?
P.S。请不要争论acl数据库结构
谢谢
答案 0 :(得分:3)
definition of the Table Data Gateway pattern是
充当数据库表的网关的对象。一个实例处理表中的所有行。
这就是为什么你不会在Zend Framework中看到它的使用方式有所不同。它是Data Source Architectural Patterns,而您要问的是域特定类。
您遇到的是Impedance Mismatch,这意味着您的Business Objects与数据库设计的结构不匹配。常见的解决方案是使用DataMapper或ORM为您处理。
另一种解决方案是在数据库中创建一个View,它以将1:1映射到所需业务对象的方式连接表。然后为该视图添加Zend_Db_Table
。你仍然需要提出自定义创建,更新,删除逻辑。这不是数据映射,但是如果你没有任何Business / Domain类可以映射,那就没关系。