Via Composer:
$ composer require nepada/email-address-doctrine
Register the types in your 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
);
In Nette with nettrine/dbal integration, you can register the types in your configuration:
dbal:
connection:
types:
Nepada\EmailAddress\RfcEmailAddress: Nepada\EmailAddressDoctrine\RfcEmailAddressType
Nepada\EmailAddress\CaseInsensitiveEmailAddress: Nepada\EmailAddressDoctrine\CaseInsensitiveEmailAddressType
This package provides two Doctrine types:
RfcEmailAddressType
for storing emails represented byRfcEmailAddress
.CaseInsensitiveEmailAddressType
for storing emails represented byCaseInsensitiveEmailAddress
.
Both types normalize the domain part of the email address before storing it in database, but they differ in handling of the local part of the address. See nepada/email-address for further details.
Example usage in the entity:
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;
}
}
Example usage in query builder:
$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();