Zend Framework 2:Ajax提交和Annotation Builder?

时间:2013-12-16 21:22:18

标签: php zend-framework annotations zend-framework2

我想验证我通过Ajax提交的表单,但这对我不起作用。请帮忙解决这个问题。

在我使用的注释构建器中:

<?php

    namespace Application\Model;

    use Zend\Form\Annotation;

    /**
     * @Annotation\Name("sejour")
     * @Annotation\Hydrator("Zend\Stdlib\Hydrator\ObjectProperty")
    */

  class Sejour {

public $id;

/**
 * @Annotation\Validator({"name":"StringLength", "options":{"min":1, "max":3}})
 */
public $titre;

public $agenceId;

public $agenceLibelle;

public function exchangeArray($data)
{
    $this->id = (isset($data['id'])) ? $data['id'] : null;
    $this->titre = (isset($data['titre'])) ? $data['titre'] : null;
    $this->agenceId = (isset($data['agenceId'])) ? $data['agenceId'] : null;
    $this->agenceLibelle = (isset($data['agenceLibelle'])) ? $data['agenceLibelle'] : null;
}
}

在我的控制器文件中:

$values = json_decode(file_get_contents('php://input'), true);

$builder    = new AnnotationBuilder();
$entity     = new Sejour();

$form       = $builder->createForm($entity);
$form->bind($entity);
$form->setData($values);

if ( $form->isValid()) {     
    /* save datas in base */    
}else{
    $errors = $form->getMessages();

    print_r($errors);
}

每次我都没有错误

请帮帮我

由于

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

根据您的Zend Framework 2版本,您可能会遇到preferFormInputFilter标志已更改它在zf2 2.2.4中的默认值这一事实。

该标志规定了表单的行为,决定在验证过程中,表单是否应使用自己的输入过滤器(事先已提供)或每个元素提供的过滤器。

使用AnnotationBuilder创建的表单的默认设置是将标志设置为true,因此,由于您在实际设置过滤器的位置粘贴了任何代码,因此默认过滤器为none。

您可能希望通过添加以下内容为添加的元素启用默认元素过滤器:

$form->setPreferFormInputFilter(FALSE);

创建表单后。

另一种选择当然是为表单提供实际的输入过滤器。