nepada/email-address-doctrine

Doctrine 的电子邮件地址类型。

v1.8.0 2024-04-06 09:14 UTC

README

Build Status Coverage Status Downloads this Month Latest stable

安装

通过 Composer

$ composer require nepada/email-address-doctrine

在 bootstrap 中注册类型

\Doctrine\DBAL\Types\Type::addType(
    \Nepada\EmailAddress\RfcEmailAddress::class,
    \Nepada\EmailAddressDoctrine\RfcEmailAddressType::class
);
\Doctrine\DBAL\Types\Type::addType(
    \Nepada\EmailAddress\CaseInsensitiveEmailAddress::class,
    \Nepada\EmailAddressDoctrine\CaseInsensitiveEmailAddressType::class
);

在 Nette 中,使用 nettrine/dbal 集成,您可以在配置中注册类型

dbal:
    connection:
        types:
            Nepada\EmailAddress\RfcEmailAddress: Nepada\EmailAddressDoctrine\RfcEmailAddressType
            Nepada\EmailAddress\CaseInsensitiveEmailAddress: Nepada\EmailAddressDoctrine\CaseInsensitiveEmailAddressType

使用方法

此包提供两种 Doctrine 类型

  1. RfcEmailAddressType 用于存储由 RfcEmailAddress 表示的电子邮件。
  2. CaseInsensitiveEmailAddressType 用于存储由 CaseInsensitiveEmailAddress 表示的电子邮件。

这两种类型在存储到数据库之前都会对电子邮件地址的域名部分进行归一化,但它们在处理地址的本地部分方面有所不同。有关更多详细信息,请参阅 nepada/email-address

实体中的示例用法

use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Nepada\EmailAddress\CaseInsensitiveEmailAddress;

#[Entity]
class Contact
{

    #[Column(type: CaseInsensitiveEmailAddress::class, nullable: false)]
    private CaseInsensitiveEmailAddress $email;

    public function getEmailAddress(): CaseInsensitiveEmailAddress
    {
        return $this->emailAddress;
    }

}

查询构建器中的示例用法

$result = $repository->createQueryBuilder('foo')
    ->select('foo')
    ->where('foo.email = :emailAddress')
     // the parameter value is automatically normalized to example@example.com
    ->setParameter('emailAddress', 'Example@Example.com', CaseInsensitiveEmailAddress::class)
    ->getQuery()
    ->getResult();