Here is an example to create an ZF2 form to create user accounts with the option to change the account without changing the password.
namespace ExampleForm;
use ZendFormForm;
use ZendFormElement;
class User extends Form
{
public function __construct()
{
parent::__construct('user');
$this->setAttribute('method', 'post');
$this->setInputFilter(new BisAdminFormUserFilter());
$this->add(array(
'name' => 'userName',
'attributes' => array(
'type' => 'text',
'id' => 'username',
'class' => 'txt',
'size' => '50',
),
'options' => array(
'label' => 'Username'
),
));
$this->add(array(
'name' => 'fullName',
'attributes' => array(
'type' => 'text',
'id' => 'fullname',
'class' => 'txt',
'size' => '50',
),
'options' => array(
'label' => 'Fullname'
),
));
$this->add(array(
'name' => 'password',
'attributes' => array(
'type' => 'password',
'id' => 'password1',
'class' => 'txt',
),
'options' => array(
'label' => 'Password'
),
));
$this->add(array(
'name' => 'password_verify',
'attributes' => array(
'type' => 'password',
'id' => 'password',
'class' => 'txt',
),
'options' => array(
'label' => 'Password (verify)'
),
));
$this->add(array(
'name' => 'submit',
'attributes' => array(
'type' => 'submit',
'value' => 'Save',
'class' => 'button',
),
));
}
}
namespace ExampleForm;
use ZendFormForm;
use ZendInputFilterInputFilter;
class UserFilter extends InputFilter
{
public function __construct()
{
$this->add(array(
'name' => 'userName',
'filters' => array(
array('name' => 'StringTrim'),
array('name' => 'StripTags'),
),
'validators' => array(
array(
'name' => 'NotEmpty',
'options' => array(
'messages' => array(
ZendValidatorNotEmpty::IS_EMPTY => 'Username cannot be empty.'
)
)
),
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 3,
'max' => 50,
'messages' => array(
ZendValidatorStringLength::TOO_SHORT => 'Username is to short, use a minimum of 3 characters.',
ZendValidatorStringLength::TOO_LONG => 'Username is to long, use a maximum of 50 characters.'
)
),
)
)
));
$this->add(array(
'name' => 'fullName',
'filters' => array(
array('name' => 'StringTrim'),
array('name' => 'StripTags'),
),
'validators' => array(
array(
'name' => 'NotEmpty',
'options' => array(
'messages' => array(
ZendValidatorNotEmpty::IS_EMPTY => 'Fullname cannot be empty.'
)
)
)
)
));
$this->add(array(
'name' => 'password',
'filters' => array(
array('name' => 'StringTrim'),
array('name' => 'StripTags'),
),
'validators' => array(
array(
'name' => 'NotEmpty',
'options' => array(
'messages' => array(
ZendValidatorNotEmpty::IS_EMPTY => 'The password cannot be empty.'
)
)
)
)
));
$this->add(array(
'name' => 'password_verify',
'filters' => array(
array('name' => 'StringTrim'),
array('name' => 'StripTags'),
),
'validators' => array(
array(
'name' => 'NotEmpty',
'options' => array(
'messages' => array(
ZendValidatorNotEmpty::IS_EMPTY => 'The verify password cannot be empty.'
)
)
),
array(
'name' => 'Identical',
'options' => array(
'token' => 'password',
'messages' => array(
ZendValidatorIdentical::NOT_SAME => 'The passwords are not the same.',
)
)
),
)
));
}
}
public function usereditAction(){
$id = (int) $this->params()->fromRoute('id', 0);
if (!$id) {
return $this->redirect()->toRoute('config', array('action' => 'userlist'));
}
$objectManager = $this->getServiceLocator()->get('DoctrineORMEntityManager');
$user = $objectManager->find('ExampleEntityUser',$id);
$form = new ExampleFormUser();
$form->setHydrator(new ZendStdlibHydratorReflection());
$form->bind($user);
if ($this->getRequest()->isPost()) {
$form->setData($this->getRequest()->getPost());
if ($form->get("password")->getValue() == ""){
$form->getInputFilter()->remove('password');
$form->getInputFilter()->remove('password_verify');
}
if ($form->isValid()) {
//var_dump($form->getData());
$objectManager->persist($user);
$objectManager->flush();
$this->flashMessenger()->addMessage('Changes saved');
return $this->redirect()->toRoute('config',array('action'=>'userlist'));
} else {
$form->get("password")->setValue("");
return array(
'userForm' => $form,
'flashMessages' => $this->flashMessenger()->getMessages(),
);
}
} else {
$form->get("password")->setValue("");
return array(
'userForm' => $form,
'flashMessages' => $this->flashMessenger()->getMessages(),
);
}
}
Edit Useraccount
<?php
$form = $this->userForm;
$form->prepare();
$form->setAttribute(‘method’, ‘post’);
$formerrors = $this->formElementErrors()->setMessageOpenFormat(’
’)
->setMessageSeparatorString(’’)
->setMessageCloseString(’’)
->render($form->get(‘userName’));
$formerrors .= $this->formElementErrors()->setMessageOpenFormat(’’)
->setMessageSeparatorString(’’)
->setMessageCloseString(’’)
->render($form->get(‘fullName’));
$formerrors .= $this->formElementErrors()->setMessageOpenFormat(’’)
->setMessageSeparatorString(’’)
->setMessageCloseString(’’)
->render($form->get(‘password’));
$formerrors .= $this->formElementErrors()->setMessageOpenFormat(’’)
->setMessageSeparatorString(’’)
->setMessageCloseString(’’)
->render($form->get(‘password2’));
$formerrors .= $this->formElementErrors()->setMessageOpenFormat(’’)
->setMessageSeparatorString(’’)
->setMessageCloseString(’’)
->render($form->get(‘active’));
?>
<?php if($formerrors != “”): ?>
<?php echo $formerrors?>
<?php endif ?>
<?php echo $this->form()->openTag($form) ?>
<?php echo $this->formLabel($form->get(‘userName’)) ?> <?php echo $this->formInput($form->get(‘userName’)) ?>
<?php echo $this->formLabel($form->get(‘fullName’)) ?> <?php echo $this->formInput($form->get(‘fullName’)) ?>
Use only to change your password, otherwise leave them empty
<?php echo $this->formLabel($form->get(‘password’)) ?> <?php echo $this->formInput($form->get(‘password’)) ?>
<?php echo $this->formLabel($form->get(‘password_verify’)) ?> <?php echo $this->formInput($form->get(‘password_verify’)) ?>
<?php echo $this->formLabel($form->get(‘active’)) ?> <?php echo $this->formSelect($form->get(‘active’)) ?>
<?php echo $this->formSubmit($form->get(‘submit’)) ?>
<?php echo $this->form()->closeTag() ?>