I'm in a process of creating a registration form:
here is my action:
public function registrationAction() {
$form = new RegistrationForm();
$request = $this->getRequest();
if ($request->isPost()) {
$users = new Users();
$form->setInputFilter($users->getInputFilter());
$form->setData($request->getPost());
var_dump($form->isValid());
exit;
if ($form->isValid()) {
$users->exchangeArray($form->getData());
$this->getUsersTable()->addUser($users);
$message = 'Регистрирахте се успешно! Можете да влезете в профила си чрез формата за вход на началната страница.';
}
}
return new ViewModel(array(
'form' => $form,
'message' => $message,
));
}
And here is my form:
namespace Main\Form;
use Zend\Form\Form;
class RegistrationForm extends Form {
public function __construct($name = null) {
parent::__construct('User');
$this->add(array(
'name' => 'username',
'attributes' => array(
'type' => 'Zend\Form\Element\Text',
),
'options' => array(
'label' => 'Потребителско име',
),
));
$this->add(array(
'name' => 'email',
'attributes' => array(
'type' => 'Zend\Form\Element\Text',
),
'options' => array(
'label' => 'Email адрес',
),
));
$this->add(array(
'name' => 'password',
'attributes' => array(
'type' => 'Zend\Form\Element\Text',
),
'options' => array(
'label' => 'Парола',
),
));
$this->add(array(
'name' => 'submit',
'attributes' => array(
'type' => 'Zend\Form\Element\Submit',
),
'options' => array(
'label' => 'Регистрация',
)
));
}
}
Here is the inputFilter in the Users model in Object\Model\Users.php:
namespace Object\Model;
use Zend\Validator\StringLength;
use Zend\Validator\NotEmpty;
use Zend\Validator\EmailAddress;
use Zend\Validator\Date;
use Zend\InputFilter\Factory as InputFactory;
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\InputFilterAwareInterface;
use Zend\InputFilter\InputFilterInterface;
class Users {
public $user_id;
public $username;
public $name;
public $email;
public $password;
public $sex;
public $birthday;
public $avatar;
public $user_level;
public $date_registered;
public $is_active;
public $is_banned;
public function exchangeArray($data) {
$this->user_id = (isset($data['user_id'])) ? $data['user_id'] : null;
$this->username = (isset($data['username'])) ? $data['username'] : null;
$this->name = (isset($data['name'])) ? $data['name'] : null;
$this->email = (isset($data['email'])) ? $data['email'] : null;
$this->password = (isset($data['password'])) ? $data['password'] : null;
$this->sex = (isset($data['sex'])) ? $data['sex'] : null;
$this->birthday = (isset($data['birthday'])) ? $data['birthday'] : null;
$this->avatar = (isset($data['avatar'])) ? $data['avatar'] : null;
$this->user_level = (isset($data['user_level'])) ? $data['user_level'] : null;
$this->date_registered = (isset($data['date_registered'])) ? $data['date_registered'] : null;
$this->is_active = (isset($data['is_active'])) ? $data['is_active'] : null;
$this->is_banned = (isset($data['is_banned'])) ? $data['is_banned'] : null;
}
public function setInputFilter(InputFilterInterface $inputFilter) {
throw new \Exception('Not used');
}
public function getInputFilter() {
if (!$this->inputFilter) {
$inputFilter = new InputFilter();
$factory = new InputFactory();
$inputFilter->add($factory->createInput(array(
'name' => 'user_id',
'filters' => array(
array('name' => 'Int'),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'username',
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'NotEmpty',
'options' => array(
'messages' => array(
NotEmpty::IS_EMPTY => 'Моля въведете потребителско име!',
),
),
),
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 1,
'max' => 50,
'messages' => array(
StringLength::TOO_SHORT => 'Потребителското име трябва да бъде минимум 1 символ',
StringLength::TOO_LONG => 'Потребителското име не може да надвишава 50 символа',
),
),
),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'name',
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'max' => 255,
'messages' => array(
StringLength::TOO_LONG => 'Вашите име и фамилия не може да надвишават 255 символа',
),
),
),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'email',
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'NotEmpty',
'options' => array(
'messages' => array(
NotEmpty::IS_EMPTY => 'Моля въведете email адрес!',
),
),
),
array(
'name' => 'EmailAddress',
'options' => array(
'encoding' => 'UTF-8',
'min' => 1,
'max' => 50,
'messages' => array(
EmailAddress::INVALID => 'Email адресът е невалиден.',
),
),
),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'password',
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'NotEmpty',
'options' => array(
'messages' => array(
NotEmpty::IS_EMPTY => 'Моля въведете парола!',
),
),
),
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 4,
'max' => 90,
'messages' => array(
StringLength::TOO_SHORT => 'Паролата трябва да бъде минимум 4 символ',
StringLength::TOO_LONG => 'Паролата не може да надвишава 90 символа',
),
),
),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'sex',
'filters' => array(
array('name' => 'Int'),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'birthday',
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'Date',
'options' => array(
Date::INVALID_DATE => 'Въведената дата е грешна.',
),
),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'avatar',
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'user_level',
'filters' => array(
array('name' => 'Int'),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'date_registered',
'filters' => array(
array('name' => 'Int'),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'is_active',
'filters' => array(
array('name' => 'Int'),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'is_banned',
'filters' => array(
array('name' => 'Int'),
),
)));
$this->inputFilter = $inputFilter;
}
return $this->inputFilter;
}
}
When I try to access isValid() or getMessages() methods of the $form object, they're empty. When calling them in var_dump, they're always boolean false... May someone help me? Thanks in advance. This happens only in this module. In my other module, everything's okay with the forms. This ZF2 is so complicated at times... :|
InputFilter- Sam