- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据文档,我正在使用 DataMapper:https://symfony.com/doc/current/form/data_mappers.html从表单中 3 个字段中的 1 个更新日期:
表格类
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('period_start_daily', DateType::class, [
'widget' => 'single_text',
'label' => 'Day',
'html5' => false,
'attr' => ['class' => 'js-datepicker'],
'mapped' => false,
'required' => false
])
->add('period_start_weekly', DateType::class, [
'widget' => 'single_text',
'label' => 'Week',
'html5' => false,
'attr' => ['class' => 'js-datepicker'],
'mapped' => false,
'required' => false
])
->add('period_start_monthly', ChoiceType::class, [
'required' => true,
'label' => 'Month',
'choice_loader' => new CallbackChoiceLoader(function () {
$months = [];
for ($i = 0; $i <= 12; $i++) {
$month = strtotime('first day of this month + ' . $i . ' months');
$months[date('M Y', $month)] = date('Y-m-d', $month);
}
return $months;
}),
'mapped' => false,
'required' => false
])
...
$builder
->setDataMapper($this);
...
public function mapFormsToData($forms, &$data)
{
/** @var FormInterface[] $forms */
$forms = iterator_to_array($forms);
switch (intval($forms['Type']->getViewData())){
case 1:
$start = $forms['period_start_daily']->getNormData();
$end = clone $start;
break;
case 2:
$start = $forms['period_start_weekly']->getNormData();
$end = clone $start;
$end->add(new \DateInterval('P6D'));
break;
case 3:
$start = $forms['period_start_daily']->getNormData();
$end = (new \DateTime(
strtotime($this->getData()['period_start_monthly']->format('Y-m-d').' last day of month')
));
break;
}
$data = (new DataSet())
->setPeriodStart($start)
->setPeriodEnd($end)
->setType($forms['Type']->getNormData())
->setUpload($forms['upload']->getNormData());
$form = $this->createForm(DataSetType::class, $dataset);
$form->handleRequest($request->getCurrentRequest());
if ($form->isSubmitted() && $form->isValid()){
$dataset
->setPeriodStart($form->getNormData()->getPeriodStart())
->setPeriodEnd($form->getNormData()->getPeriodEnd());
$dataset->setType($form->getNormData()->getType());
$dataset->setActive(false);
$dataset->setUpload($form->getNormData()->getUpload());
$dataset->getPeriodStart()->setTime(0, 0, 0);
$dataset->getPeriodEnd()->setTime(0, 0, 0);
$em->persist($dataset);
$em->flush();
最佳答案
我下载了your project调试它,我发现了一个错误 - 很难检测到:) 我开始认为 Symfony 4 可能有问题,但不是。一切都很好,一切都很好。
看:
spl_object_hash — Return hash id for given object
This function returns a unique identifier for the object. This id can be used as a hash key for storing objects, or for identifying an object, as long as the object is not destroyed. Once the object is destroyed, its hash may be reused for other objects.
$beforeHash
和
$afterHash
具有不同的值 - 因此,它不是同一个对象
DataSetType.php
(第 138 行)您创建了
DataSet
的新实例丢失对作为
mapFormsToData
中的第二个参数传递的前一个对象的引用:
$data
中的对象参数改为创建
DataSet
的新实例.
$data = (new DataSet())
->setPeriodStart($start)
->setPeriodEnd($end)
->setType($forms['Type']->getNormData())
->setUpload($forms['upload']->getNormData())
->setActive($forms['active']->getNormData())
;
$data->setPeriodStart($start)
->setPeriodEnd($end)
->setType($forms['Type']->getNormData())
->setUpload($forms['upload']->getNormData())
->setActive($forms['active']->getNormData());
create
方法应如下所示:
public function create(RequestStack $request)
{
$dataset = new DataSet();
$form = $this->createForm(DataSetType::class, $dataset);
$form->handleRequest($request->getCurrentRequest());
if ($form->isSubmitted() && $form->isValid()){
$em = $this->getDoctrine()->getManager();
$em->persist($dataset);
$em->flush();
if ($dataset->getUpload()) {
$em->getRepository('App:DataSet')
->disableUploadOthers($dataset->getId(), $dataset->getType());
}
$this->addFlash('success', 'Dataset created.');
return $this->redirectToRoute('dataset_index');
}
return $this->render('dataset/create.html.twig', [
'form' => $form->createView()
]);
}
$dataset
中的值必须在没有你帮助的情况下改变:)
关于forms - Symfony DataMapper 不更新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54178705/
我正在阅读 Zend Framework 快速入门教程,在他们的演示代码中,他们使用了一个数据映射器,该映射器使用 Zend_DB_Table 来访问数据库(参见:http://framework.z
到目前为止,我一直在所有c#数据库驱动的应用程序中使用Active记录。但是现在我的应用程序需要将我的持久性代码与业务对象分开。我已经阅读了很多有关Martin Fowler的数据映射模式的文章,但是
我读过很多有关 DataMapper 模式的内容。 据我所知,DataMapper 应该将表单模型对象映射到实体对象。因此被用作某种适配器。 我理解正确吗? 最佳答案 不,Data Mapper是关于
我正在尝试使用新的 DataMapper 模型映射遗留 MySQL 数据库。 MySQL 模式: CREATE TABLE IF NOT EXISTS `backer` ( `backer_id`
我有一个带有几个字段和唯一约束的数据映射器对象。实际上,这确保了每个用户 ID 每个日期代码只能创建一条记录。 class Form include Datamapper::Resource
问题是我无法将列类型更改为“文本” 这是我看到的错误: DarkBook:playground Justin$ rake migrate_up (in/Users/Justin/Dropbox/Bus
我只是希望以随机顺序返回 DataMapper 记录。 这是我的模型(使用 DataMapper 和 sqlite3 数据库): class Movie include DataMapper::R
我在以下代码中遇到关联问题。 我遇到的错误是对最后一行代码的评论。 编辑:我简化了代码... require 'rubygems' require 'data_mapper' # requires a
我正在使用 Ruby/Sinatra 和 Datamapper 编写网络应用程序。我有一些表,我想将数据预加载到其中。有没有最佳实践?例如。我有一个名为 references 的表 id name u
我正在使用带有 DataMapper MySql 数据库的简单 Sinatra 网络应用程序。我声明了一个具有属性的 Datamapper Post 类 property :created_at, D
我有以下模型 class TagType include DataMapper::Resource ## Relationships belongs_to :category has
我正在使用 Ruby 中的 Sinatra 和 Datamapper 编写一个简单的应用程序,但我遇到了一个问题 — 当我尝试将数据保存到我的 SQLite 数据库时,没有任何变化。但是当我尝试安装数
我有一张产品表,其中包含 SKU、名称等属性。 似乎我需要为每个类别的产品创建单独的表格,因为类别的功能种类繁多。 假设我有一张放 Boot 、工具和帽子的 table /类 我想(除非有更好的方法)
我正在用 PHP 编写一个必须写入三个持久层的系统: 一个网络服务 两个数据库(一个mysql一个mssql) 这是遗留系统的原因,无法更改。 我想使用 DataMapper 模式,并且我正在尝试建立
我有一个这样的数据库模式 DataMapper.setup :default, "sqlite://#{Dir.pwd}/image.db" class Image include DataM
我有两个看起来像这样的模型 class Stage include DataMapper::Resource property :id, Serial belongs_to :
使用以下模型,我正在寻找一种高效且直接的方法来返回所有具有 0 个父任务(本质上是顶级任务)的任务。我最终也想返回 0 个子任务之类的东西,所以一个通用的解决方案会很好。这是否可以使用现有的 Data
我目前正在开发一个基于现有数据库的新应用程序,使用 DataMapper 进行数据访问。但是,它在处理外键时的约定不是数据库使用的约定。 例子: class Invoice include Dat
谁能给我解释一下这是怎么回事吗? 这是我放在一起向大家展示的示例: class Person include DataMapper::Resource property :id, Serial
class Alpha include DataMapper::Resource property :id, Serial property :name, String has n
我是一名优秀的程序员,十分优秀!