使用DataMapper每个场域实体没有setter
编辑该页面使用DataMapper每个场域实体没有setter
这是一个例子使用DataMapper的实体,避免为每个字段setter和getter。
的必备条件
- 你已经SonataAdmin DoctrineORM启动并运行。
- 你已经有一个实体类,在这个例子中,类将被调用
例子
。 - 你已经有一个管理员设置,在这个例子中它叫
ExampleAdmin
。
菜谱
如果有要求实体领域特定方法,而不是为每个实体字段getter / setter然后用SonataAdmin行不通的。但Symob娱乐下载fony表单组件提供DataMapper
可以用来使它工作。ob娱乐下载Symfony本身缺乏使用的例子DataMapper
但有一篇文章webmozart覆盖它https://webmozart.io/blog/2015/09/09/value-objects-in-ob娱乐下载symfony-forms/
实体例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日
/ / src /实体/ Example.php名称空间应用程序\实体;最后类例子{私人字符串美元的名字;私人字符串美元描述;公共函数__construct(字符串美元的名字、字符串美元描述){美元这- >name =美元的名字;美元这- >描述=美元描述;}公共函数更新(字符串美元描述){美元这- >描述=美元描述}/ /其他代码在这里}
DataMapper
能够设置实体数据不可能使用setterDataMapper
应该创建:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
/ / src /形式/ DataMapper / ExampleDataMapper.php名称空间应用程序\形式\DataMapper;使用ob娱乐下载\组件\形式\DataMapperInterface;使用应用程序\实体\例子;最后类ExampleDataMapper实现了DataMapperInterface{/ * * *@param示例数据*美元@paramFormInterface[] | \可反驳的美元形式* /公共函数mapDataToForms(美元数据,美元形式){如果(零= = !美元数据){美元形式= iterator_to_array (美元形式);美元形式(“名字”]- >setData (美元数据- >getName ());美元形式(“描述”]- >setData (美元数据- >getDescription ());}}/ * * *@paramFormInterface[] | \ *美元可反驳的形式@param示例数据* /美元公共函数mapFormsToData(美元形式,&美元数据){美元形式= iterator_to_array (美元形式);如果(零= = =美元数据- >getId ()) {美元的名字=美元形式(“名字”]- >getData ();美元描述=美元形式(“描述”]- >getData ();/ /创建新实体美元数据=新示例(美元的名字,美元描述);}其他的{美元数据- >更新(美元形式(“描述”]- >getData ());}}}
管理类
现在我们需要使用我们的配置形式ExampleDataMapper
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日
/ / src / Admin / ExampleAdmin.php名称空间应用程序\管理;使用奏鸣曲\AdminBundle\管理\AbstractAdmin;使用奏鸣曲\AdminBundle\形式\FormMapper;使用应用程序\形式\DataMapper\ExampleDataMapper;最后类ExampleAdmin扩展AbstractAdmin{受保护的函数configureFormFields(FormMapper美元形式):无效{美元形式- >add (“名字”,零)- >add (“描述”,零);;美元构建器=美元形式- >getFormBuilder ();美元构建器- >setdatamap (新ExampleDataMapper ());}/ /……}
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。