我正在symfony2中创建一个应用程序,其中包含具有教义的客人,场地,活动和客人类别。仅与symfony2保持联系3周,我已经完成了为sql中的所有实体创建模式表,它们之间的依赖关系和每个实体的crud。我的问题更多的是理论而不是实践。
我将创建一个安全捆绑包(来自书中的安全捆绑包或 FOSUserBundle)。然后,我将设置三个角色:
- 管理员
- 主办单位
- 客人
每位客人都有自己的个人资料,每个组织者都将"依附"于他的客人 - 简单来说,组织者X只会交流和查看客人X-1,X-2等 - 他将无法查看Y-1。对你来说,我问这样的问题似乎很简单和有趣,但是......我是自学成才:)
问题是:如何将活动附加到组织者及其来宾?我能想象到的最简单的方法是:为每个客人、事件、类别、事件设置一个唯一的令牌(或任何自行生成的代码)并加入表。
如果客人约翰与令牌=vsfv2435r3frwf24t5grf 有任何事件/类别/场地在活动、类别或场地中查找相同的令牌并分配权限。
这听起来合乎逻辑还是愚蠢?
您需要查看教义关联映射(一对多,多对多等)
http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/association-mapping.html
它们非常容易设置(你可以在Symfony中使用注释或在yml模式文件中完成),并且可以让你轻松完成你正在描述的事情,请查看数据库的Symfony文档以获取更多信息
http://symfony.com/doc/current/book/doctrine.html
为Organiser
和Guest
创建交叉表,以指示他们参加/组织的活动。每个Guest
也将有交叉表Organiser
。通过这种方式,您可以轻松地将组织者分配给客人并按其过滤(我假设客人可以参加多个活动等)。
在教义世界中,它看起来像这样:
事件
...
/**
* @ORMManyToMany(targetEntity="Organiser", inversedBy="events")
*/
protected $organisers;
/**
* @ORMManyToMany(targetEntity="Guest", inversedBy="events")
*/
protected $guests;
主办单位
...
/**
* @ORMManyToMany(targetEntity="Event", mappedBy="organisers")
*/
protected $events;
/**
* @ORMManyToMany(targetEntity="Guest", mappedBy="organisers")
*/
protected $guests;
客人
...
/**
* @ORMManyToMany(targetEntity="Event", mappedBy="guests")
*/
protected $events;
/**
* @ORMManyToMany(targetEntity="Organiser", inversedBy="guests")
*/
protected $organisers;