我正在开发一个在登录时保存不可见用户数据的站点(例如,另一个站点上的外部ID)。我们将在创建帐户后立即创建/保存此数据。
我可以看到我们使用
保存数据我觉得#1可能是最合乎逻辑的地方,但是在模块中创建一个节点似乎并不是一件容易的事。
#3感觉就像解决这个问题的一种典型方法,但只是在一个捕获领域中拥有一堆序列化数据并不是最好的设计。
有什么建议吗?
答案 0 :(得分:5)
IMO,每个选项都有自己的专业和有关,你应该是最后一个人,你应该知道你的项目是什么,项目的关键点是什么,什么是什么?是预期的典型用户模式,可用资源等等......
如果我完全自由选择,我的个人收藏将是选项#4,#1和#5 (等等!#5?是的:见下文!)。我做出选择的指导原则是:
这将是 clean 解决方案,因为您可以让开发人员更轻松地维护您的代码,因为对用户的所有更改都会通过同一个渠道,并且更容易追踪问题或添加新功能。
我发现它并不特别 简单 ,因为它要求您与该模块的自定义API进行交互。
至于 可扩展性 ,这取决于内容配置文件模块API的设计程度。诱惑可能是为了您的目的简单地使用所述模块完成的表,绕过API,但这使您有可能在某一天的关键安全更新中,您匆忙整个系统将崩溃,因为架构已经改变......
这将是 clean 解决方案,因为您可以设计您的表(并且您的模块可以完全按照您的需要执行),并且您可以创建自己的API被其他模块使用。另一方面,您将引入另一段代码来改变注册过程,这可能使开发人员更难以跟踪问题并以一致的方式扩展系统。
这将非常 简单 来实现代码。此外,数据库设计也会受益:另外需要考虑的是表格很容易检查和查询。在大多数情况下,为视图创建一个新的处理程序很容易:5个中的4个只使用一个带有视图的原型对象。
当然,这非常容易 扩展 。为一个字段创建模块后,您可以根据需要管理任意数量的字段,主要是将一个字段的代码复制/粘贴到另一个字段(或者如果您去OOP则从同一个祖先继承)。
我知道你已经了解了drupal,但是如果你需要一个如何做到这一点的指针,我在this other answer给出了一些指示。
那意味着#4减去了各个模块散布功能的缺点......当然,如果你已经管理了200个字段,那么这不是一个可行的选择,但是如果你很早就进入你的设计,那么你可以考虑一下。
根据我的经验,几乎每个需要系统集成的项目(意思是:为多个系统中的同一用户同步数据)都有用户注册的自定义需求,我发现这个解决方案最符合我的需求有两个原因:< / p>
HTH!
答案 1 :(得分:1)
如果您已经在使用内容配置文件模块,那么我真的建议继续使用它并将字段附加到它。您在创建帐户时保存数据,同时为用户创建节点并不难。真。
$node = new stdClass();
$node->title = $user->name; // what I'd use, or you can have node auto title handle the title for you. Up to you!
$node->field_hidden_field[0]['value'] = '$*#$f82hff';
$node->uid = $user->uid;
node_save($node);
鲍勃是你的叔叔!
答案 2 :(得分:0)
我会选择选项3.最终,即使是其他模块也会将数据存储在数据库中以对抗用户。所以你可以自己直接保存它,可能比那些模块更有效。
当然,根据数据的大小,您可以调用是否在users表中添加新列,或者使用用户的id作为外键为数据创建新表。