如何在持久化 Doctrine 实体时自动 trim 字符串?

How to automatically trim string when persisting a Doctrine entity?

假设我有这个实体:

use App\Repository\CategoryRepository;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass=CategoryRepository::class)
 */
class MyEntity
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private ?int $id = null;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private ?string $name = null;

    // getter setters ...
}

我的控制器:

class MyController extends AbstractController
{
    public function __invoke(EntityManagerInterface $em)
    {
        $myEntity = new MyEntity();
        $myEntity->setName('  awesome name  ');
        $em->persist($myEntity);
        $em->flush();
    }
}

我希望学说将 myEntityname 注册为 awesome name 而不是 awesome name

有没有办法配置学说来做到这一点?

您不需要以任何方式“配置学说”。只需使用 PHP 并在您的实体中引入逻辑:

class MyEntity {
    // ... rest of the class implementation

    public function setName(?string $name): void {
        $this->name = $name === null ? $name : trim($name);
    }
}

这样您的数据将处于一致状态然后您将其保存在数据库中。