【问题标题】:zend framework stringtrim filter not workingzend 框架 stringtrim 过滤器不起作用
【发布时间】:2009-07-17 13:39:23
【问题描述】:

我在使用 zend 框架的字符串修剪过滤器时遇到问题。我使用以下代码在 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'] 时,我得到了未过滤的输入。如何让我的文本元素发布过滤后的值?

【问题讨论】:

    标签: zend-framework filter


    【解决方案1】:

    使用 $code = $this->code->getValue() 因为 Zend_Form 实际上并不过滤 $_POST 数组。

    【讨论】:

    • 太棒了,这工作:)。顺便说一句,我发现我也可以使用 $this->getValue('code')。非常感谢
    • 你也可以使用这个 getValues() 来返回过滤后的整个表单。
    【解决方案2】:

    对不起,我知道我迟到了,但万一有人遇到同样的问题,

    我今天遇到了这个问题,我找到了几个解决这个问题的方法:

    我在这个帖子上回答了同样的回复 Other Post

    首先我的代码是:

    • 这是表单

      类 Application_Form_UserForm 扩展 Zend_Form {

      公共函数初始化() {

      /* 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{

    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 "</pre>";
                exit;*/
                $userData['fname'] = $form->getValue('fname');
                $userData['lname'] = $form->getValue('lname');
                $userData['email'] = $form->getValue('email');
                $userData['gender'] = $form->getValue('gender');
                $userData['track'] = $form->getValue('track');
                $user_model = new Application_Model_User();
                $user_model-> addNewUser($userData);
                $this->redirect('/user/list');
            }
        }
        $this->view->user_form = $form;
    }
    
    public function editAction()
    {
        // action body
        $form = new Application_Form_UserForm();
        $user_model = new Application_Model_User ();
        $id = $this->_request->getParam('uid');
        $user_data = $user_model-> userDetails($id)[0];
        $form->populate($user_data);
        $this->view->userName = $user_data['fname']." ".$user_data['lname'];
        $this->view->user_form = $form;
        $request = $this->getRequest();
        if($request->isPost()){
            if($form->isValid($request->getPost())){
                $userData['fname'] = $form->getValue('fname');
                $userData['lname'] = $form->getValue('lname');
                $userData['email'] = $form->getValue('email');
                $userData['gender'] = $form->getValue('gender');
                $userData['track'] = $form->getValue('track');
                $user_model-> updateUser($id, $userData);
                $this->redirect('/user/list');
            }
        }
    }
    
    
    }
    

    第一个解决方案:

    我在表单类中的表单元素上使用了过滤器, 但我从控制器中的 $form 对象中检索了数据, 因为我发现了那个方法

    addFilter()

    $_POST 数组值没有变化,所以我从 $form 对象中检索数据,然后将其作为数组传递给模型。

    第二种解决方案:

    我试图通过从过滤器类创建对象并应用所需的过滤器来对控制器中的值应用过滤器,而不是在表单中

    第三种解决方案:

    是使用方法

    addValidator()

    使用影响 $_POST 值的 regex

    【讨论】:

      猜你喜欢
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多