【问题标题】:Symfony2: form field gets "required"even if is not set as it in form or Twig templateSymfony2:表单字段即使未在表单或 Twig 模板中设置为“必需”
【发布时间】:2015-02-04 17:28:29
【问题描述】:

我在我的 Form 类上定义一个字段,如下所示:

->add('alternative_email', 'email', array(
    'trim' => true,
    'required' => false
))

并且也尝试过这种方式:

->add('alternative_email', 'text', array(
    'trim' => true,
    'required' => false
))

然后在我渲染该字段的模板上,我只是这样做:

{{ form_widget(form.user.alternative_email, {'attr':{'class':'form-control'}})}}

每当我呈现该表单时,我都会将其作为输出:

<input type="email" id="natural_user_alternative_email" name="natural[user][alternative_email]" required="required" class="form-control" data-bv-field="natural[user][alternative_email]">

为什么要添加 required 属性?

作为旁注,我通过在该字段上设置此验证规则来使用BootstrapValidator

'natural[user][alternative_email]': {
    validators: {
        emailAddress: {},
        different: {
            field: 'natural[user][email]',
        }
    }
}

这意味着:

  • 有效的电子邮件地址
  • 当前电子邮件 (alternative_email) 与 natural[user][email] 上的电子邮件不同

此外,我通过手动删除app/cache 的所有内容(rm -rf app/ cache)多次清除缓存我通过运行php -r "apc_clear_cache(); apc_clear_cache('user'); apc_clear_cache('opcode');" 清除了APC 缓存,最后重新启动了这两个服务:php-fpmnginx .

我还在 Chrome 的“隐身窗口”中工作,因此内容不会被缓存。谁能帮我解决这个奇怪的问题?

运行其他测试:这怎么可能?

试图找出问题出在哪里,我进行了一些其他测试,但令我惊讶的是,我在这一点上感到困惑,因为这是不可能的。请参阅我已将表单类上的字段定义更改为:

->add('email_alternative', 'text', array(
    'trim' => true,
    'required' => false
))

并且没有触及我代码的任何其他部分,因此模板保持不变并要求渲染alternative_email 字段。正如预期的那样,应该会出现错误吗?不,没有错误,页面仍然呈现并且字段不断调用natural[user][alternative_email],这怎么可能?

我已经停止了 Nginx 并启动了 Apache 来测试是否已经存在某种奇怪的缓存,但和以前一样:没有错误,字段保持调用 natural[user][alternative_email],有什么线索吗?

注意:我使用的是 Symfony 2.6.1

【问题讨论】:

  • correo_alternativo 或 Alternative_email?
  • @Cerad alternative_email 只是在从西班牙语翻译成英语时打错字了,抱歉
  • 检查您的控制器是否调用了正确的表单类型。如果删除 BootstrapValidator,required 属性是否仍然存在?
  • 是的,已经尝试过了,最后一个奇怪的事情是我删除了完整的 use 语句并且事情继续进行,所以这里发生了一些非常奇怪的事情,我无法找到任何东西线索?

标签: php symfony caching nginx


【解决方案1】:

我找到了问题所在,我应该说几乎总是开发人员(我在这种情况下)错误而不是框架本身。问题很简单,A.L 是正确的:控制器调用了类似的表单,而我在其他表单中进行了更改。所以现在一切都很好。感谢 A.L 的提示

【讨论】:

    猜你喜欢
    • 2013-05-20
    • 1970-01-01
    • 2015-08-29
    • 2017-06-24
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多