Гео*_*ков 5 php forms zend-framework2
我正在创建注册表单:
这是我的行动:
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,
));
}
Run Code Online (Sandbox Code Playgroud)
这是我的表格:
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' => '???????????',
)
));
}
Run Code Online (Sandbox Code Playgroud)
}
以下是Object\Model\Users.php中Users模型中的inputFilter:
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;
}
Run Code Online (Sandbox Code Playgroud)
}
当我尝试访问$ form对象的isValid()或getMessages()方法时,它们是空的.在var_dump中调用它们时,它们总是布尔为假...有人可以帮助我吗?提前致谢.这只发生在这个模块中.在我的其他模块中,表格中的一切都没问题.这个ZF2有时很复杂......:|
我遇到了和你一样的问题,isValid()会返回false,而getMessages()则是一个空数组.
我的问题是我已经为字段(例如电子邮件)定义了输入验证器,但该字段在我验证的表单上不存在.似乎Zend Framework 2中存在一个错误,在这种情况下不会打印错误消息:github上的错误报告
因此解决方案是将缺少的字段添加到表单对象.
你这样写(在控制器中)很正常吗?
var_dump($form->isValid());
exit;
Run Code Online (Sandbox Code Playgroud)
也许是在发生错误时才显示“消息”,不是吗?