Извините, я знаю, что опаздываю, но в случае, если кто-то столкнулся с той же проблемой,
Я столкнулся с этой проблемой сегодня и нашел несколько способов решить эту проблему:
я ответил на этот же ответ
Другое сообщение
сначала мой код:
Это форма класс
класс Application_Form_UserForm расширяет Zend_Form
{
публичная функция init ()
{
/* Form Elements & Other Definitions Here ... */
$this->setMethod('POST');
$fname = new Zend_Form_Element_Text('fname');
$fname->setLabel('First Name: ');
$fname->setAttribs(Array(
'placeholder'=>'Example: Eslam',
'class'=>'form-control'
));
$fname->setRequired();
$fname->addValidator('StringLength', false, Array(4,20));
$fname->addFilter('StringTrim');
$fname->addFilter('StripTags');
$fname->removeDecorator('DtDdWrapper');
$fname->removeDecorator('label');
$fname->removeDecorator('HtmlTag');
$lname = new Zend_Form_Element_Text('lname');
$lname->setLabel('Last Name: ');
$lname->setAttribs(Array(
'placeholder'=>'Example: Khoga',
'class'=>'form-control'
));
$lname->setRequired();
$lname->addValidator('StringLength', false, Array(4,20));
$lname->addFilter('StringTrim');
$lname->addFilter('StripTags');
$lname->removeDecorator('DtDdWrapper');
$lname->removeDecorator('label');
$lname->removeDecorator('HtmlTag');
$email = new Zend_Form_Element_Text('email');
$email->setLabel('Email: ');
$email->setAttribs(Array(
'placeholder'=>'Example@Example.com',
'class'=>'form-control'
));
$email->setRequired();
$email->addValidator('StringLength', false, Array(5,250));
$email->addFilter('StringTrim');
$email->addFilter('StripTags');
$email->removeDecorator('DtDdWrapper');
$email->removeDecorator('label');
$email->removeDecorator('HtmlTag');
$gender = new Zend_Form_Element_Select('gender');
$gender->setRequired();
$gender->addMultiOption('male','Male')->
addMultiOption('female','Female')->
addMultiOption('none','Prefer not to mention');
$gender->setAttrib('class', 'form-control');
$track_obj = new Application_Model_Track();
$allTracks = $track_obj->listAll();
$track = new Zend_Form_element_Select('track');
foreach($allTracks as $key=>$value)
{
$track->addMultiOption($value['id'], $value['name']);
}
$submit= new Zend_Form_Element_Submit('submit');
$submit->setAttribs(array('class'=>'btn btn-success'));
$reset= new Zend_Form_Element_Submit('reset');
$reset->setAttribs(array('class'=>'btn btn-danger'));
$this->addElements(array(
$fname,
$lname,
$email,
$gender,
$track,
$submit,
$reset
));
}
}
Это контроллер класс
класс UserController расширяет Zend_Controller_Action {
<code>public function init()
{
/* Initialize action controller here */
}
public function indexAction()
{
// action body
}
public function listAction()
{
// action body
$user_model = new Application_Model_User();
$this->view->users = $user_model->listUsers();
$track_form = new Application_Form_Track();
$this->view->track_form = $track_form;
$track_model = new Application_Model_Track();
$request = $this->getRequest();
if($request->isPost())
{
if($track_form->isValid($request->getPost())){
$track_model-> addTrack($request->getParams());
$this->redirect('/user/add');
}
}
}
public function detailsAction()
{
// action body
$user_model = new Application_Model_User();
$us_id = $this->_request->getParam("uid");
$user = $user_model->userDetails($us_id);
$trackModel = new Application_Model_Track();
$track = $trackModel->getTrackName($user[0]['track']);
$user[0]['track'] = $track[0]['name'];
$this->view->user = $user[0];
}
public function deleteAction()
{
// action body
$user_model = new Application_Model_User();
$us_id = $this->_request->getParam("uid");
$user_model->deleteUser($us_id);
$this->redirect("/user/list");
}
public function addAction()
{
// action body
$form = new Application_Form_UserForm();
$request = $this->getRequest();
if($request->isPost()){
if($form->isValid($request->getPost())){
/*echo "<pre>";
print_r($form);
echo "
";
выход;*/
$ userData ['fname'] = $ form-> getValue ('fname');
$ userData ['lname'] = $ form-> getValue ('lname');
$ userData ['email'] = $ form-> getValue ('email');
$ userData ['пол'] = $ form-> getValue ('пол');
$ userData ['track'] = $ form-> getValue ('track');
$ user_model = new Application_Model_User ();
$ user_model-> addNewUser ($ userData);
$ This-> перенаправлять ( '/ пользователь / список');
}
}
$ this-> view-> user_form = $ form;
}
публичная функция editAction ()
{
// тело действия
$ form = new Application_Form_UserForm ();
$ user_model = new Application_Model_User ();
$ id = $ this -> _ request-> getParam ('uid');
$ user_data = $ user_model-> userDetails ($ id) [0];
$ Форма-> заселить ($ user_data);
$ this-> view-> userName = $ user_data ['fname']. "". $ user_data ['lname'];
$ this-> view-> user_form = $ form;
$ request = $ this-> getRequest ();
если ($ request-> isPost ()) {
если ($ форма-> IsValid ($ request-> getPost ())) {
$ userData ['fname'] = $ form-> getValue ('fname');
$ userData ['lname'] = $ form-> getValue ('lname');
$ userData ['email'] = $ form-> getValue ('email');
$ userData ['пол'] = $ form-> getValue ('пол');
$ userData ['track'] = $ form-> getValue ('track');
$ user_model-> updateUser ($ id, $ userData);
$ This-> перенаправлять ( '/ пользователь / список');
}
}
}
}
Первое решение:
я использовал фильтр для элементов формы в классе формы,
но я получил данные из $ form объекта в контроллере,
как я нашел этот метод
AddFilter ()
не изменяется в значениях массива $ _POST, поэтому я получил данные из объекта $ form и затем передал их в виде массива в Model.
Второе решение:
Я попытался применить фильтр к значениям в контроллере, а не к форме, создав объект из класса фильтра и применив необходимый фильтр
Третье решение:
это использовать метод
addValidator ()
с регулярным выражением , которое влияет на значения $ _POST.