【问题标题】:Symfony forms - Expected argument of type "string", "DateTime" givenSymfony 形式 - 给定“字符串”、“日期时间”类型的预期参数
【发布时间】:2014-03-18 10:48:10
【问题描述】:

我收到此错误消息:

“给定“字符串”类型的预期参数,“日期时间””

这是我在 symfony 中的表单代码

$builder->add('dateOfBirth', 'datetime', [
    'widget' => 'single_text',
    'label'  => 'Geboortedatum',
    'attr' => ['class' => 'form-control birthdaypicker'],
    'label_attr' => ['class' => 'col-sm-2 control-label']
]);

这是模板:

<div class="form-group">
    {{ form_label(form_pupil.dateOfBirth) }}
    <div class="col-sm-10">
        {{ form_widget(form_pupil.dateOfBirth) }}
        <small>{{ form_errors(form_pupil.dateOfBirth) }}</small>
    </div>
</div>

文档(实体)

/**
 * @MongoDB\Date
 * @Assert\NotBlank(message="Een geboortedatum is vereist")
 * @Assert\Length(max=10, maxMessage="Een geboortedatum kan maximaal 10 karakters bevatten")
 */
 protected $dateOfBirth;

在我的文档(实体)中,它也是一个日期类型。我不知道为什么 Symfony 需要一个字符串..

【问题讨论】:

  • 您能否发布有关错误消息的更多详细信息?它是来自 Symfony 表单/验证还是来自 Doctrine ODM?
  • vendor/symfony/symfony/src/Symfony/Component/Validator/Constraints/LengthValidator.php 在第 33 行 - } if (!is_scalar($value) && !(is_object($value) && method_exists ($value, '__toString'))) { throw new UnexpectedTypeException($value, 'string'); } $stringValue = (string) $value;
  • 万一有人遇到这个错误,我在validation.yml配置文件中有一个无效的验证规则。

标签: php symfony datetime symfony-forms symfony-validator


【解决方案1】:
@Assert\Length(max=10, maxMessage="Een geboortedatum kan maximaal 10 karakters bevatten")

无法检查日期时间对象的长度! (删除了这个断言并且它起作用了)

【讨论】:

    【解决方案2】:

    试试这个:

    $builder->add('dateOfBirth', 'datetime', [
        'data' => new \DateTime(),
        'widget' => 'single_text',
        'label'  => 'Geboortedatum',
        'attr' => ['class' => 'form-control birthdaypicker'],
        'label_attr' => ['class' => 'col-sm-2 control-label']
    ]);
    

    【讨论】:

    • 不能使用\DateTime(),Mongo 不支持日期时间,我只需要日期。
    • 如果你用 date 替换 datetime 删除 'data' =&gt; new \DateTime(), 行它有效吗?
    • 我更改了添加日期的第二个参数。并删除了第三个参数数组中的“数据”。但主要问题是我的文档中的断言验证。我在日期对象上使用了@Assert\Length。导致错误的原因。
    • 为什么不检查表单的创建?
    猜你喜欢
    • 1970-01-01
    • 2019-01-30
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多