Skip to content

Instantly share code, notes, and snippets.

@mdjaman
Forked from grizzm0/Foo.php
Created August 30, 2019 09:31
Show Gist options
  • Save mdjaman/993d9523ce5e178f8a4cb19d8605c8b9 to your computer and use it in GitHub Desktop.
Save mdjaman/993d9523ce5e178f8a4cb19d8605c8b9 to your computer and use it in GitHub Desktop.
Best practice form/input-filter setup for ZF3
<?php
namespace Application\Entity;
/**
* Class Foo
*
* @package Application\Entity
*/
class Foo
{
/**
* @var int
*/
protected $id;
/**
* @var string
*/
protected $email;
/**
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* @return string
*/
public function getEmail()
{
return $this->email;
}
/**
* @param string $email
*/
public function setEmail($email)
{
$this->email = $email;
}
}
<?php
namespace Application\Form;
use Zend\Form\Element\Email;
use Zend\Form\Form;
/**
* Class FooForm
*
* @package Application\Form
*/
class FooForm extends Form
{
const EMAIL = 'email';
/**
* {@inheritdoc}
*/
public function init()
{
$this->add([
'name' => self::EMAIL,
'type' => Email::class,
'options' => [
'label' => self::EMAIL,
],
]);
}
}
<?php
namespace Application\Factory\Form;
use Application\Entity\Foo;
use Application\Form\FooForm;
use Application\InputFilter\FooInputFilter;
use Interop\Container\ContainerInterface;
use Zend\Stdlib\Hydrator\ClassMethods;
/**
* Class FooFormFactory
*
* @package Application\Factory\Form
*/
class FooFormFactory
{
/**
* {@inheritdoc}
*/
public function __invoke(ContainerInterface $container)
{
$form = new FooForm('foo');
$form->setHydrator($container->get('HydratorManager')->get(ClassMethods::class));
$form->setInputFilter($container->get('InputFilterManager')->get(FooInputFilter::class));
$form->setObject(new Foo());
return $form;
}
}
<?php
namespace Application\InputFilter;
use Application\Form\FooForm;
use Zend\Filter\StringToLower;
use Zend\Filter\StringTrim;
use Zend\InputFilter\InputFilter;
use Zend\Validator\EmailAddress;
/**
* Class FooInputFilter
*
* @package Application\InputFilter
*/
class FooInputFilter extends InputFilter
{
/**
* {@inheritdoc}
*/
public function init()
{
$this->add([
'name' => FooForm::EMAIL,
'required' => true,
'filters' => [
['name' => StringToLower::class],
['name' => StringTrim::class],
],
'validators' => [
['name' => EmailAddress::class],
],
]);
}
}
<?php
use Application\Factory\Form\FooFormFactory;
use Application\Form\FooForm;
use Application\InputFilter\FooInputFilter;
return [
'form_elements' => [
'factories' => [
FooForm::class => FooFormFactory::class,
],
],
'input_filters' => [
'factories' => [
FooInputFilter::class => Zend\ServiceManager\Factory\InvokableFactory::class,
],
],
];
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment