- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我是 Symfony2 的新手,并设置了一个表单以通过 Doctrine 将日期时间数据输入 MySQL 数据库,但我收到以下错误:
The form's view data is expected to be of type scalar, array or an instance of \ArrayAccess, but is an instance of class DateTime. You can avoid this error by setting the "data_class" option to "DateTime" or by adding a view transformer that transforms an instance of class DateTime to scalar, array or an instance of \ArrayAccess.
当我尝试建议的 array('data_class' => 'dateTime')
字段设置时,我在缓存的 Twig 模板中得到以下内容:
Catchable Fatal Error: Object of class DateTime could not be converted to string in
我已经尝试了一些方法来让它工作,但似乎没有任何效果!
在我的实体中声明如下:
/**
* @var \DateTime
*
* @ORM\Column(name="my_date", type="datetime", nullable=false)
* @Assert\Date()
*/
private $myDate;
并作为我表单中的隐藏字段:
$form = $this->createFormBuilder($myClass)
->add('myDate', 'hidden')
它被隐藏的原因是因为值是通过 javascript 多阶段表单添加的。任何人都可以了解问题可能是什么,或者我如何解决它吗?我应该将我的实体设置更改为“字符串”吗?
谢谢。
最佳答案
隐藏文件类型只是一个隐藏的文本字段。
这意味着,为了呈现小部件,它只使用 simple widget template (参见 hidden_widget.html
中的 include 语句):
<input type="<?php echo isset($type) ? $view->escape($type) : 'text' ?>" <?php echo $view['form']->block($form, 'widget_attributes') ?><?php if (!empty($value) || is_numeric($value)): ?> value="<?php echo $view->escape($value) ?>"<?php endif ?> />
如您所见,它只是回显您传递给该字段的值(转义函数不会处理任何重要的事情)。问题是:您传递了一个 DateTime
类作为值,而不是字符串。即使您指定传递了一个 DateTime
类,它仍然没有更改值,它只是尝试将 DateTime
对象转换为一个字符串。这是不可能的。
这就是目前发生的事情。现在,让我们继续讨论如何修复它。它尝试呈现的数据 ($value
) 实际上称为 View 数据(正如您在 the variable is defined 中看到的那样)。在当前情况下, View 数据等于 Form::$viewData 属性(参见 the ->getViewData()
definition )。此属性之前由 ->normToView()
方法定义(请参阅 the $viewData
definition)。
正如您在 ->normToView()
method 中看到的那样,它运行 View 转换器如果可用:
foreach ($this->config->getViewTransformers() as $transformer) {
$value = $transformer->transform($value);
}
因此,为了将 DateTime
对象转换为字符串,我们必须使用 View 转换器。现在,让我们来看看可用的 data transformers .我们很幸运,因为有一个 DateTimeToStringTransformer
:
/**
* Transforms between a date string and a DateTime object
*
* @author Bernhard Schussek <bschussek@gmail.com>
* @author Florian Eckerstorfer <florian@eckerstorfer.org>
*/
class DateTimeToStringTransformer extends BaseDateTimeTransformer
{
这正是我们所需要的!
现在,让我们将此数据转换器注册为 hidden
字段的 View 转换器:
use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToStringTransformer;
// ...
$builder = $this->createFormBuilder($myClass);
$builder->add(
$builder->create('myDate', 'hidden')
->addViewTransformer(new DateTimeToStringTransformer())
);
完成此操作后,应该会正确生成表单。而且因为几乎所有形式的东西都是对称的,转换器也适用于从字符串到日期时间,这意味着您的代码只使用 DateTime
对象!
关于php - Doctrine 和 Symfony 2 中的 DateTime 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21791068/
在有些场景下,我们需要对我们的varchar类型的字段做修改,而修改的结果为两个字段的拼接或者一个字段+字符串的拼接。 如下所示,我们希望将xx_role表中的name修改为name+id。
SELECT incMonth as Month, SUM( IF(item_type IN('typ1', 'typ2') AND incMonth = Month, 1, 0 ) )AS
我最近读到 volatile 字段是线程安全的,因为 When we use volatile keyword with a variable, all the threads read its va
我在一些模型中添加了一个 UUID 字段,然后使用 South 进行了迁移。我创建的任何新对象都正确填充了 UUID 字段。但是,我所有旧数据的 UUID 字段为空。 有没有办法为现有数据填充 UUI
刚刚将我的网站从 mysql_ 更新为 mysqli,并破坏了之前正常运行的查询。 我试图从旋转中提取 id,因为它每次都会增加 1,但我不断获取玩家 id,有人可以告诉我我做错了什么吗?我尝试了将
我在 Mac OS X 上使用带有 Sequel Pro 的 MySQL。我想将一个表中的一个字段(即名为“GAME_DY”的列)复制到另一个名为“DAY_ID”的表的空字段中。两个表都是同一数据库的
问题: 是否有可能有一个字段被 JPA 保留但被序列化跳过? 可以实现相反的效果(JPA 跳过字段而序列化则不会),如果使用此功能,那么相反的操作肯定会很有用。 类似这样的事情: @Entity cl
假设我有一个名为“dp”的表 Year | Month | Payment| Payer_ID | Payment_Recipient | 2008/2009 | July
我将尝试通过我的 Raspberry Pi 接入点保证一些 QoS。 开始之前,我先动手:我阅读了有关 tcp、udp 和 ip header 的内容。在IP header description我看
如果你能弄清楚如何重命名这个问题,我愿意接受建议。 在 Dart 语言中,可以编写一个带有 final 字段的类。这些是只能设置的字段构造函数前 body 跑。这可以在声明中(通常用于类中的静态常量)
你怎么样? 我有两个带有两个字段的日期选择器 我希望当用户选择 (From) 时,第二个字段 (TO) 将是 next day 。比如 booking.com 例如:当用户选择From 01-01-2
我想我已经看到了这个问题的一些答案,这些答案可能与我需要的相差不远,但我对 mysql 的了解还不够确定,所以我会根据我的具体情况提出问题。 我有一个包含多个表的数据库,为此,如果“image”表上的
我在 mySQL 数据库中有 2 个表: customers ============ customer_id (1, 2 ) customer_name (john, mark) orders ==
我正在开发一个员工目标 Web 应用程序。 领导/经理在与团队成员讨论后为他们设定目标。这是一年/半年/季度,具体取决于组织遵循的评估周期。 现在的问题是添加基于时间段的字段或存档上一季度/年度数据的
我正在寻找允许内容编辑器从媒体库中选择多个文件的东西,这些文件将在渲染中列出。他们还需要能够上传文件和搜索。它必须在页面编辑器(版本 8 中称为体验编辑器)中工作。 到目前为止我所考虑的: 一堆文件字
现在,我有以下由 original.df %.% group_by(Category) %.% tally() %.% arrange(desc(n)) 创建的 data.frame。 DF 5),
我想知道是否有一些步骤/解决方案可以处理错误消息并将它们放入 Pentaho 工具中的某个字符串或字段中?例如,如果连接到数据库时发生某些错误,则将该消息从登录到字符串/字段。 最佳答案 我们在作业的
如何制作像短信应用程序一样的“收件人”字段?例如,右侧有一个“+”按钮,当添加某人时,名称将突出显示并可单击,如圆角矩形等。有没有内置的框架? 最佳答案 不,但请参阅 Three20 的 TTMess
是否可以获取记录的元素或字段的列表 通过类型信息类似于类的已发布属性的列表吗? 谢谢 ! 最佳答案 取决于您的delphi版本,如果您使用的是delphi 2010或更高版本,则可以使用“新rtti”
我正在构建一个 SQLite 数据库来保存我的房地产经纪人的列表。我已经能够使用外键来识别每个代理的列表,但我想在每个代理的记录中创建一个列表;从代理商和列表之间的一对一关系转变为一对多关系。 看这里
我是一名优秀的程序员,十分优秀!