noahlvb/valueobject-bundle

Symfony 集成我的值对象包

v2.0.0 2022-04-30 20:14 UTC

This package is auto-updated.

Last update: 2024-09-29 06:20:14 UTC


README

Symfony 集成我的值对象包

CI Latest Stable Version License

安装

使用 composer,添加

$ composer require noahlvb/valueobject-bundle

运行测试

为了确保一切正常工作,您可以运行测试

$ make test

Doctrine DBAL

为了存储您自己的值对象,只需创建一个新的由 ValueObjectType 扩展的 doctrine 类型。同时将此新创建的类型添加到您的 doctrine 配置中。

class EmailAddressType extends ValueObjectType
{
    public function getClassName(): string
    {
        return EmailAddress::class;
    }

    public function getName(): string
    {
        return 'email_address';
    }
}
doctrine:
    dbal:
        types:
          email_address: SoulSurvivor\Integration\Doctrine\Persistence\Type\ValueEmailAddressType

Symfony 表单

如果您想在 Symfony 表单中使用您的值对象,您应该创建一个新的表单类型,该类型扩展了 ValueObjectForm。然后在使用您自己的表单时使用该表单类型。

class EmailAddressForm extends ValueObjectForm
{
    protected function getClassName(): string
    {
        return EmailAddress::class;
    }
}

默认情况下,ValueObjectForm 将是一个 TextType。如果您想覆盖此并使其成为一个 EmailType 等,可以覆盖 getParent() 方法。

class EmailAddressForm extends ValueObjectForm
{
    protected function getClassName(): string
    {
        return EmailAddress::class;
    }

    public function getParent()
    {
        return EmailType::class;
    }
}

Symfony 验证器

默认情况下,ValeuObjectForm 将在验证表单时使用 ValueObjectConstraint(Validator)。这将使用值对象的内置 isValid() 方法。如果您想编写自己的验证消息或扩展验证器,可以这样做。

class EmailAddressConstraint extends ValueObjectConstraint
{
    public $message = 'This email address is not valid.';
}
class EmailAddressConstraintValidator extends ValueObjectConstraintValidator
{
}

您需要创建一个空类并扩展 ValueObjectConstraintValidator。这是因为 Symfony 验证器根据类名匹配约束及其验证器。

最后,在您的表单类型中覆盖 getConstraintClassName(),使用您新创建的约束的类名。如下所示

class EmailAddressForm extends ValueObjectForm
{
    protected function getConstraintClassName(): string
    {
        return EmailAddressConstraint::class;
    }
}