Skip to content

Instantly share code, notes, and snippets.

@Doopin
Created December 21, 2014 16:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Doopin/7c484da95cb8777bf3fb to your computer and use it in GitHub Desktop.
Save Doopin/7c484da95cb8777bf3fb to your computer and use it in GitHub Desktop.
Filter, Form, Validation
//My Filter Class
<?php
namespace Admeup\Form\FormValidator;
use Zend\InputFilter\Factory as InputFactory;
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\InputFilterAwareInterface;
use Zend\InputFilter\InputFilterInterface;
class NewsletterFormValidator implements InputFilterAwareInterface {
protected $m_inputFilter;
public $uid, $email, $phone, $company, $lname, $website, $fname;
public function getInputFilter() {
if(!$this->m_inputFilter){
$inputFilter = new InputFilter();
$factory = new InputFactory();
$inputFilter->add($factory->createInput(array(
'name' => 'uid',
'filters' => array(
array('name' => 'Int'),
)
)));
$inputFilter->add($factory->createInput(array(
'name' => 'email',
'validators' => array(
array(
'name' => 'EmailAddress',
),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'phone',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 3,
'max' => 10,
),
),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'lname',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 3,
'max' => 10,
),
),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'fname',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 3,
'max' => 10,
),
),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'website',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 3,
'max' => 10,
),
),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'company',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 3,
'max' => 10,
),
),
),
)));
$this->m_inputFilter = $inputFilter;
}
return $this->m_inputFilter;
}
public function setInputFilter(InputFilterInterface $inputFilter){
throw new \Exception("Matter in setInputFilter of NewsletterFormValidator");
}
}
//Now My Controller
//Please just focus on the isPost() statement
public function newsletterAction() {
$newsletterRequest = $this->getRequest();
$message = '';
if($newsletterRequest->isPost()){ // <-- Please just focus in this statement
//Admeup\Form\FormValidator\NewsletterFormValidator;
$newsletterFormValidator = new NewsletterFormValidator();
// If I uncomment this, the form is no more valid.
$this->m_newsletterForm->setInputFilter($newsletterFormValidator->getInputFilter());
$this->m_newsletterForm->setData($newsletterRequest->getPost());
if($this->m_newsletterForm->isValid()){
$this->m_admeupService->saveNewsletter($this->m_newsletterForm->getData());
return $this->redirect()->toRoute('home/newsletter/success', array(), array(
'query' => array('subscribed' => $this->m_newsletterForm->getData()->getFname().' '.$this->m_newsletterForm->getData()->getLname())
), true);
}
else{
$message = 'Erreur! Veillez reéssayer...';
return new ViewModel(array(
'newsletterForm' => $this->m_newsletterForm,
'femail' => $this->params()->fromQuery('femail'),
'message' => $message
));
}
}
if($newsletterRequest->isGet()){
return new ViewModel(array(
'newsletterForm' => $this->m_newsletterForm,
'femail' => $this->params()->fromQuery('femail'),
'message' => $message,
));
}
else{
return new ViewModel(array(
'newsletterForm' => $this->m_newsletterForm,
));
}
}
@nomaanp
Copy link

nomaanp commented Dec 21, 2014

$inputFilter->add($factory->createInput(array(
                'name'     => 'phone',
                'required' => true,
                'allow_empty' => true,
                'filters'  => array(
                    array('name' => 'StripTags'),
                    array('name' => 'StringTrim'),
                ),
                'validators' => array(
                    array(
                        'name'    => 'StringLength',
                        'options' => array(
                            'encoding' => 'UTF-8',
                            'min'      => 3,
                            'max'      => 10,
                        ),
                    ),
                ),
            )));

@Doopin
Copy link
Author

Doopin commented Dec 21, 2014

It doesn't work.
The mandatory is email field and his filter is
$inputFilter->add($factory->createInput(array(
'name' => 'email',
'validators' => array(
array(
'name' => 'EmailAddress',
),
),
)));

and all others have this filter
$inputFilter->add($factory->createInput(array(
'name' => 'lname',
'allow_empty' => true,
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 3,
'max' => 10,
),
),
),
)));

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment