实体总是必须基于Symfony2中的数据库吗?

mro*_*rok 9 symfony

我有一个项目,其中数据库隐藏在Web服务(其中许多)之后.简而言之 - 直接访问数据库是不可能的.

我使用Symfony2,每当我有一个"存储数据"(例如:用户,汽车,房间)和服务(可从容器访问)/模型的对象时,我强迫自己使用实体,当涉及更重的逻辑时(例如TransactionMaker,RoomBooker,CarDestroyer等).

没有任何ORM描述的实体被选择在阵列上,因为框架提供了非常简单的验证,构建表单和IDE智能感知的方法.

现在它工作正常,但一些开发人员声称实体必须始终反映数据库中的表.真的吗?

Xoc*_*zin 9

实体仅在配置为执行此操作时映射到数据库表,从它所读的书中:

该类 - 通常称为"实体",意味着保存数据的基本类 - 很简单,有助于满足在您的应用程序中需要产品的业务需求.http://symfony.com/doc/current/book/doctrine.html#creating-an-entity-class

与使用简单数组相比,以更正式的方式对数据建模是一种很好的做法,这就是它们存在的原因.

也许它们最常用于将数据映射到数据库,但这不是必需的.它们的目的是成为数据容器,以有意义的方式对应用程序的信息进行建模.(即在USER ENTITY中为USER建模)

如果您没有使用数据库来保存您的实体,请随意使用它们来传递数据,创建表单,使用验证服务,安全性等.创建一个服务以允许从Symfony应用程序访问Web服务上的信息也是一个好主意,这样你就可以得到类似的东西:

$user = $this->get('some_persistance_service_you_write')->find($id,'user');
$user->setName('new value');
$err = $this->get('validator')->validate($user);
//....
$this->get('some_persistance_service_you_write')->persist($user);
Run Code Online (Sandbox Code Playgroud)

当然,这不是主题,但它是一个例子,说明如何使用没有数据库访问权限的实体.