Php 如何在多个用户之间共享对象

Php 如何在多个用户之间共享对象,php,hash,yii2,project,multi-user,Php,Hash,Yii2,Project,Multi User,我对一个奇怪的情况有怀疑(不是很奇怪,但需要处理)。 我有一个php应用程序和一个客户端要求进行特定的开发。 具体开发包含调查和可编辑表格,并分为多个部分 第1节->调查和表格 第2节->调查和表格等 每个部分都很难加载,只有当它被其他用户更改时,我才需要再次加载它 这是主要问题,我不知道如何处理这种情况。(我正在考虑为每个部分创建一些散列,当用户尝试打开会话时,比较此散列,以了解它们是否相同..如果不相同,请重新加载该部分)。您有更好的想法吗?您可以使用乐观锁定机制来实现这一点 yii2中有一

我对一个奇怪的情况有怀疑(不是很奇怪,但需要处理)。 我有一个php应用程序和一个客户端要求进行特定的开发。 具体开发包含调查和可编辑表格,并分为多个部分

第1节->调查和表格

第2节->调查和表格等

每个部分都很难加载,只有当它被其他用户更改时,我才需要再次加载它


这是主要问题,我不知道如何处理这种情况。(我正在考虑为每个部分创建一些散列,当用户尝试打开会话时,比较此散列,以了解它们是否相同..如果不相同,请重新加载该部分)。您有更好的想法吗?

您可以使用乐观锁定机制来实现这一点

yii2中有一个非常好的解决方案,您可以查看文档:

基本上,ActiveRecord有一个内置的乐观锁功能

乐观锁

返回存储用于实现乐观锁定的锁定版本的列的名称

乐观锁定允许多个用户访问同一记录进行编辑,并避免潜在冲突。如果用户试图保存某个过时数据的记录(因为另一个用户修改了该数据),将抛出yii\db\StaleObjectException异常,并跳过更新或删除

乐观锁定仅由update()和delete()支持

如果您使用ActiveForm,您可以将OptimisticLockBehavior添加到您的模型类中,以便自动化该过程

工作原理:

在收集用户输入的Web表单中,添加一个隐藏字段,用于存储正在更新的录制的锁定版本

要使用此行为,请首先按照optimisticLock()中列出的步骤启用乐观锁,从ActiveRecord类的rules()方法中删除保存锁版本的列名,然后向其中添加以下代码:

强烈建议扩展活动记录,仅将行为附加到子类。在这种情况下,父类仍然是usabel,用于内部使用。(始终尝试检查getBodyParams())

OptimisticLockBehavior还提供了一个名为upgrade()的方法,该方法可将模型的版本增加一个,当您需要在连接的客户端中将实体标记为过时时,该方法可能会很有用,并在它们再次加载之前避免对其进行任何更改


添加修改数据的日志表,或按修改的用户和日期在表中进行跟踪。添加日志表并获取该记录的最后两个条目,如果两行中的
user\u id
相同,则不会更改,如果不更改,则会更改
use yii\behaviors\OptimisticLockBehavior;

public function behaviors()
{
    return [
        OptimisticLockBehavior::class,
    ];
}