【问题标题】:Can't get Symfony validation to work无法让 Symfony 验证工作
【发布时间】:2012-09-30 08:23:09
【问题描述】:

我正在尝试为我的注册表单添加一些验证,但我无法让它工作,到目前为止我已经添加了我的用户实体

片段。

class User {

/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
   protected $userid;

/**
 * @ORM\Column(type="string", length=30)
 */
 protected $username;

为此,我在我的包中添加了一个validation.yml。

# src/Blomster/UserBundle/Resources/config/validation.yml

Blomster/UserBundle/Entity/User:
    properties:
        username:
            - NotBlank: ~
            - MinLength: { limit: 3, message: "Username is too short." }
            - MaxLength: { limit: 15, message: "Username is too long." }

使用 $form->isValid() 总是返回 true,所以我尝试 var_dump 我的表单

      'validation_groups' => null
      'validation_constraint' => null
      'constraints' => 
        array (size=0)
          ...

表单本身运行良好,提交时会添加到我的数据库中,我是否需要以某种方式将约束添加到表单中?

添加了 UserType.php

class UserType extends AbstractType {

  public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder->add('username', null, array('label' => 'Username'));
    $builder->add('email', 'email', array('label' => 'Email'));
    $builder->add('password', 'repeated', array(
        'type' => 'password',
        'required' => true,
        'first_options' => array('label' => 'Password'),
        'second_options' => array('label' => 'Repeat password'),
      ));
  }

  public function getDefaultOptions(array $options) {
    return array('data_class' => 'Blomster\UserBundle\Entity\User');
  }

  public function getName() {
    return 'user';
  }
}

【问题讨论】:

    标签: php symfony validation


    【解决方案1】:

    您需要使用长度限制:

            - MinLength: { limit: 3 }
            - MaxLength: { limit: 15 }
    

    here 是文档。

    事实上:你需要指定一个限制,因为你还可以设置其他选项,比如消息等等。

    【讨论】:

    • 我已经添加了您的更正,但是它仍然没有将约束添加到表单中。我已经更新了问题。
    • 在开发环境上运行时是否需要这样做?没有工作的想法:/
    • 不,但是我使用 APC 很容易遇到缓存问题(即使你在 DEV 中仍然存在),所以在我所有的配置更改、svn 更新等之后,我清理了所有(apc / app /cache) 缓存。
    • 其实我有疑问。如果您没有 validation: { enable_annotations: true } 之类的东西,您能否检查您的 config.yml,在这种情况下,验证可能会从实体本身获取他的长度参数。
    • 我尝试关闭 apc,但这是缓存问题。 :) enable_annotations:true 存在于我的 confnig.yml 中。这可能与某种形式有关吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多