Zend Framework фильтр не работает - PullRequest
0 голосов
/ 17 июля 2009

У меня проблемы с фильтром обрезки строк Zend Framework. Я использую следующий код для настройки текстового элемента в Zend_Form:

$voucherValidator = new Project_Validate_Voucher();        
$code = $this->addElement('text', 'code', array('label'=>'Gutscheincode'));
$code = $this->getElement('code')
    ->addFilter('StringTrim')
    ->addValidator($voucherValidator, true);

Когда я набираю какой-то текст с предшествующими пробелами или вкладками, валидатор корректно работает на фильтрованном вводе StringTrim и принимает ввод. Когда я позже проверяю $ _POST ['code'] после отправки кода, я получаю нефильтрованный ввод. Как я могу получить свой текстовый элемент для публикации отфильтрованного значения?

Ответы [ 2 ]

7 голосов
/ 17 июля 2009

Используйте $ code = $ this-> code-> getValue (), поскольку Zend_Form фактически не фильтрует массив $ _POST.

0 голосов
/ 11 марта 2017

Извините, я знаю, что опаздываю, но в случае, если кто-то столкнулся с той же проблемой,

Я столкнулся с этой проблемой сегодня и нашел несколько способов решить эту проблему:

я ответил на этот же ответ Другое сообщение

сначала мой код:

  • Это форма класс

    класс 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.

...