duandaijian1583 2015-06-20 19:14
浏览 46

Zend Framework 2 - 编写和设置一个好的InputFilter

I'm creating a form in a ZF2 site, where i already solved many problems here: Zend Framework 2 - Submitting a form (see there to find the code as well).
Now i have another problem: in my controller, form->isValid() returns true no matter what. My goal is to have a validation through PHP, then tell the user if everything is good or not via Ajax. I suppose something went wrong with my InputFilter or it's not properly attached to my form.
Any suggestions? Thanks in advance.

  • 写回答

1条回答 默认 最新

  • duanchuopi2298 2015-06-24 08:07
    关注

    Solved this one as well. Putting all validators in the same class as the form did the job; this was a mix of (poor) official docs and some forum topics here and somewhere else. Form class now looks this way:

    <?php
    namespace Site\Form;
    
    use Zend\Form\Form;
    use Zend\Form\Element;
    use Zend\InputFilter\Input;
    use Zend\InputFilter\InputFilter;
    use Zend\Validator;
    
    class ContactForm extends Form {
        public function __construct($name=null, $options=array ()) {
            parent::__construct ($name, $options);
    
            $this->setAttributes(array(
                "action" => "./",
            ));
    
    
            $nameInput = new Element\Text("nome");
            $nameInput->setAttributes(array(
                "placeholder" => "Nome e cognome",
                "tabindex" => "1"
            ));
    
            $this->add($nameInput);
    
            $emailInput = new Element\Text("email");
            $emailInput->setAttributes(array(
                "placeholder" => "Indirizzo e-mail",
                "tabindex" => "2"
            ));
    
            $this->add($emailInput);
    
            $phoneInput = new Element\Text("phone");
            $phoneInput->setAttributes(array(
                "placeholder" => "Numero di telefono",
                "tabindex" => "3",
            ));
    
            $this->add($phoneInput);
    
            $messageArea = new Element\Textarea("messaggio");
            $messageArea->setAttributes(array(
                "placeholder" => "Scrivi il tuo messaggio",
                "tabindex" => "4"
            ));
    
            $this->add($messageArea);
    
            $submitButton = new Element\Button("submit");
            $submitButton
                ->setLabel("Invia messaggio")
                ->setAttributes(array(
                    "type" => "submit"
                ));
    
            $this->add($submitButton);
    
            $resetButton = new Element\Button("reset");
            $resetButton
            ->setLabel("Cancella")
            ->setAttributes(array(
                    "type" => "reset"
            ));
    
            $this->add($resetButton);
    
            $inputFilter = new InputFilter();
    
            $nome = new Input("nome");
            $nome->getValidatorChain()
            ->attach(new Validator\StringLength(3));
    
            $email = new Input("email");
            $email->getValidatorChain()
            ->attach(new Validator\EmailAddress());
    
            $phone = new Input("phone");
            $phone->getValidatorChain()
            ->attach(new Validator\Digits());
    
            $message = new Input("messaggio");
            $message->getValidatorChain()
            ->attach(new Validator\StringLength(10));
    
            $inputFilter->add($nome)
                        ->add($email)
                        ->add($phone)
                        ->add($message);
    
            $this->setInputFilter($inputFilter);
        }
    }
    ?>
    

    I'll try factories later, but for now, this works.

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。