Mit Zend_Validator lässt sich eine sehr anspruchsvolle und sichere E-Mail Validierung durchführen, die man mit passenden Fehlermeldungen für den User bei Bedarf versehen kann:
<?php
use Zend\Form\Element;
use Zend\InputFilter\InputProviderInterface;
use Zend\Validator;
class EmailElement extends Element implements InputProviderInterface
{
protected $attributes = array(
'type' => 'email',
);
private $wrongEmailMessage = 'Bitte geben Sie eine gültige E-Mail-Adresse an.';
public function getInputSpecification()
{
return array(
'name' => $this->getName(),
'filters' => array(
array('name' => 'Zend\Filter\StringTrim'),
),
'attributes' => array(
'type' => 'email'
),
'validators' => array(
array(
'name' => 'NotEmpty',
'options' => array(
'messages' => array(
\Zend\Validator\NotEmpty::IS_EMPTY => $this->wrongEmailMessage
),
),
),
array(
'name' => 'EmailAddress',
'options' => array(
'hostnameValidator' => null,
'messages' => array(
\Zend\Validator\EmailAddress::INVALID => $this->wrongEmailMessage,
\Zend\Validator\EmailAddress::INVALID_FORMAT => $this->wrongEmailMessage,
\Zend\Validator\EmailAddress::INVALID_HOSTNAME => $this->wrongEmailMessage,
\Zend\Validator\Hostname::CANNOT_DECODE_PUNYCODE => $this->wrongEmailMessag,
\Zend\Validator\Hostname::INVALID => $this->wrongEmailMessage,
\Zend\Validator\Hostname::INVALID_DASH => $this->wrongEmailMessage,
\Zend\Validator\Hostname::INVALID_HOSTNAME => $this->wrongEmailMessage,
\Zend\Validator\Hostname::INVALID_HOSTNAME_SCHEMA => $this->wrongEmailMessage,
\Zend\Validator\Hostname::INVALID_LOCAL_NAME => $this->wrongEmailMessage,
\Zend\Validator\Hostname::INVALID_URI => $this->wrongEmailMessage,
\Zend\Validator\Hostname::IP_ADDRESS_NOT_ALLOWED => $this->wrongEmailMessage,
\Zend\Validator\Hostname::UNDECIPHERABLE_TLD => $this->wrongEmailMessage,
\Zend\Validator\Hostname::UNKNOWN_TLD => $this->wrongEmailMessage,
\Zend\Validator\Hostname::LOCAL_NAME_NOT_ALLOWED => $this->wrongEmailMessage,
\Zend\Validator\EmailAddress::INVALID_LOCAL_PART => $this->wrongEmailMessage,
\Zend\Validator\EmailAddress::INVALID_MX_RECORD => $this->wrongEmailMessage,
\Zend\Validator\EmailAddress::INVALID_SEGMENT => $this->wrongEmailMessage,
\Zend\Validator\EmailAddress::DOT_ATOM => $this->wrongEmailMessage,
\Zend\Validator\EmailAddress::QUOTED_STRING => $this->wrongEmailMessage,
\Zend\Validator\EmailAddress::INVALID_LOCAL_PART => $this->wrongEmailMessage,
)
)
)
)
);
}
}
Der Validator lässt sich im Zend Framework 2 folgender Maßen anwenden auf ein Form Element:
use Zend\Form\Element;
use Zend\Form\Form;
use Zend\InputFilter\InputFilter;
use Zend\Validator;
use Zend\InputFilter\Factory as InputFilterFactory;
class FooForm extends Form {
public function __construct() {
// add() can take either an Element/Fieldset instance,
// or a specification, from which the appropriate object
// will be built.
$this->add(new EmailElement('email'));
}
und mit einer passenden Action verarbeiten:
public function fooAction() {
$request = $this->getRequest();
$responseData = array();
if ($request->isPost()) {
$form = new \Path\Form\FooForm();
if (! $this->doValidate($form, $request)) {
