跳到内容

锁定保护

编辑此页

锁定保护将防止在多用户同时编辑对象时发生数据损坏。

示例

  1. Alice 开始编辑对象
  2. Bob 开始编辑对象
  3. Alice 提交表单
  4. Bob 提交表单

在这种情况下,消息会告诉 Bob,其他人已经编辑了该对象,他必须重新加载页面并重新应用更改。

启用锁定保护

默认情况下,锁定保护是禁用的。您可以在您的 sonata_admin 配置中启用它

1
2
3
4
5
# config/packages/sonata_admin.yaml

sonata_admin:
    options:
        lock_protection: true

您还必须配置您想要支持的每个实体,通过添加一个名为 $version 的字段来激活 Doctrine Version 功能。

使用注解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// src/Entity/Car.php

namespace App\Entity;

use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;

class Car
{
    // ...

    #[ORM\Column(type: Types::INTEGER)]
    #[ORM\Version]
    private ?int $version = null;

    // ...
}

使用 XML

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?>
<!-- src/Resources/orm/Car.orm.xml -->
<doctrine-mapping>
    <entity name="App\Entity\Car">
        <!-- ... -->

        <field name="version" type="integer" version="true"/>

        <!-- ... -->
    </entity>
</doctrine-mapping>

有关此内容的更多信息,请访问 Doctrine 文档

注意

如果对象模型管理器不支持对象锁定,则不会为该对象触发锁定保护。目前,只有 SonataDoctrineORMAdminBundle 支持它。

这项工作,包括代码示例,根据 Creative Commons BY-SA 3.0 许可协议获得许可。
目录
    版本