当前位置: 首页 > 知识库问答 >
问题:

Symfony2表单和模式属性

乜思淼
2023-03-14

我试图在Symfony2中创建一个表单,其中包含一个文本输入字段,该字段接受一个由6位数字组成的字符串,后跟一个破折号,后跟四位数字(例如123456-7890)。它确实可以工作,但我得到的HTML标记不一致,具体取决于我如何将字段添加到表单中。

这来自实体:

class Kursist
{
...
/**
 * @ORM\Column(type="string", length=11)
 */
protected $cpr;
....
public static function loadValidatorMetadata(ClassMetadata $metadata)
{
    $metadata->addPropertyConstraint('cpr', new NotBlank());
    $metadata->addPropertyConstraint('cpr', new Regex(array(
        'pattern' => '/^\d{6}-\d{4}$/',
    )));
}

从表单定义中:

class KursistType extends AbstractType
{
  public function buildForm(FormBuilderInterface $builder, array $options)
  {
    $builder->add('cpr');
    ...
  }
}

从树枝模板:

<form action= ... >;
  {{ form_row(form.cpr) }}
    ...
</form>

这就是浏览器源代码的样子——注意模式和maxlong属性:

<label for="KursistType_cpr" class="required">Cpr</label><input type="text" id="KursistType_cpr" name="KursistType[cpr]" required="required" maxlength="11" pattern="\d{6}-\d{4}" value="123456-7890" />

我想使用我自己的标签,而不是默认的,所以我改变表单字段defition:

    class KursistType extends AbstractType
    {
      public function buildForm(FormBuilderInterface $builder, array $options)
      {
        $builder->add('cpr','text', array('label' => 'CPR'));
        ...

但现在当我查看浏览器源代码时,pattern和maxlength属性已经消失了:

    <label for="KursistType_cpr" class="required">CPR</label><input type="text" id="KursistType_cpr" name="KursistType[cpr]" required="required" value="123456-7890" />

是否有某种方法可以在不删除这些属性的情况下使用FormBuilderInterface修改标签?

共有1个答案

沈建柏
2023-03-14

这种不一致是由于类型选项猜测,这发生在第一种情况下,当您不向表单生成器提供任何关于字段的附加信息时。

禁用选项猜测时,可以显式提供字段属性。

$builder->add('cpr','text', array('label' => 'CPR', 'pattern' => '\d{6}-\d{4}'));

或者甚至你可以保持选项猜测启用,但只覆盖标签属性

$builder->add('cpr',null, array('label' => 'CPR'));
 类似资料:
  • 我在处理我的联系方式时遇到了麻烦,虽然是一个简单的联系方式。我花了很多时间试图找出我的代码出了什么问题,但一直没有找到解决办法。我的对象没有接收数据。我有以下例外情况: 执行INSERT INTO联系人(电子邮件、姓名、消息、日期)VALUES时发生异常 (?, ?, ?, ?)'用参数[null, null, null,"2016-09-19 00:08:48"]: SQLSTATE[23000

  • 问题内容: 如何使用in 将 属性设置为表单? 像这样: 我希望属性设置为 日历的 此字段 __ 问题答案: 您可以从树枝模板执行此操作:

  • 表单(form)以及例如 <input> 的控件(control)元素有许多特殊的属性和事件。 当我们学习了这些相关内容后,处理表单会变得更加方便。 导航:表单和元素 文档中的表单是特殊集合 document.forms 的成员。 这就是所谓的“命名的集合”:既是被命名了的,也是有序的。我们既可以使用名字,也可以使用在文档中的编号来获取表单。 document.forms.my - name="m

  • 只使用一个集合很好,但是我需要编辑外部窗体的原型,所以它为每一行呈现内部窗体的原型。 你知道我该怎么做吗?还有什么是最好的储蓄方式 编辑:现在我正在尝试呈现嵌套窗体的原型: 促销特征选择类型 第一级原型,工作很好。

  • 我有一个谷歌表单,我要求用户包含他们的“全名”,以保持表单简短甜蜜(没有名字/姓氏的两个输入)。您可以使用正则表达式验证谷歌表单中的答案,但我不确定从哪里开始。 我希望在输入中至少有两个单词,每个单词至少有2个字符,并且我不想屏蔽任何特殊字符(以便像O'Leary这样名字的人仍然可以编写它)。基本上,我只想确保一个字段中包含两个单词,每个单词至少有2个字母。 我没有使用正则表达式或模式的经验,因此

  • 问题内容: 因此,当我的应用程序在Firefox中运行良好时,我就很喜欢它,但是随后我在IE中打开它,然后…不,请重试。 我遇到的问题是我将CSS显示属性设置为或JavaScript。 我最初使用,但是Firefox在没有该属性的情况下使它变得怪异。 我很乐意在不添加JavaScript来测试IE的情况下做到这一点。有什么建议么? 谢谢。 问题答案: 解决此问题的一种好方法是将该值设置为: 空值会