【问题标题】:Symfony 2 validate a not required field but just has limited lengthSymfony 2 验证一个非必填字段,但长度有限
【发布时间】:2014-12-02 18:10:51
【问题描述】:

我尝试验证一个非必填字段,但长度有限,为 0-50。但是 Symfony 总是生成所需的属性,如下代码。这使得用户必须填写必填字段。 这是服务器验证。此外,由于不需要的 required 属性,我在客户端验证方面也遇到了麻烦。

我希望有一个不使用 js 的解决方案。有人知道如何忽略 symfony 生成的所需属性吗?请帮我。谢谢

我的情况:我有一个蛞蝓场。它是由字段名称自动生成的(如果 slug 为空),或者用户可以自己生成。 在loadMetadata方法中,属性slug只有1个约束

$metadata->addPropertyConstraint('slug', new Length(array(
        'min' => 0, 'max' => 50
    )));

HTML 输出

<textarea id="category_slug" 
name="category[slug]" required="required" class="form-control"></textarea>

教义映射

/**
 * @var string
 * @Gedmo\Slug(fields={"name"}, unique=false)
 * @ORM\Column(name="slug", type="string", length=100, nullable=true)
 */
private $slug;

【问题讨论】:

  • 当然。在页面加载后使用 js 从您的标签中删除所需的内容 =)
  • 感谢您的回答。但是你知道不使用js的其他解决方案吗?
  • slug 属性在实体文件中是否有任何约束?如果它被标记为NotBlank,您将获得required="required" 属性。
  • 我认为您唯一的选择是使用 JS,并且就 symfony2 文档而言,如果需要,它同时在服务器端和客户端。
  • 只有一个约束 Length 和 Doctrine mapping nullable=true

标签: javascript php html validation symfony


【解决方案1】:

如果您的表单在表单类中进行了描述,您可以将其包含在该类中:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'Your\Bundle\Entity\Whatever',
        'required' => false,
    ));
}

编辑:

如果您只想影响单个字段,请在表单类中执行以下操作:

->add('slug', null, array(
    'required' => false,
)

【讨论】:

  • 谢谢。但它也会禁用其他字段的验证
【解决方案2】:

要禁用您需要的字段上的“必需”...

在您准备好的 javascript 文档上,您可以使用以下代码:

$('#category_slug').removeAttr('required');

【讨论】:

  • 没有。与其删除该属性,不如从一开始就阻止它被添加。
猜你喜欢
  • 2012-05-23
  • 1970-01-01
  • 2021-06-14
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
  • 2014-03-13
  • 2019-07-09
  • 2019-07-11
相关资源
最近更新 更多