问题描述
我有以下实体名称 EntityUpdater
<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\EntityUpdater")
* @ORM\HasLifecycleCallbacks
*/
class EntityUpdater
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer",options={"unsigned"=true})
*/
private $id;
/**
* @ORM\Column(type="string",length=128)
*/
private $entityName;
/**
* @ORM\Column(type="integer",options={"unsigned"=true})
*/
private $entityId;
/**
* @ORM\Column(type="string",length=128)
*/
private $entityColumnName;
/**
* @ORM\Column(type="text",nullable=true)
*/
private $entityColumnValue;
/**
* @ORM\Column(type="integer",options={"unsigned"=true})
*/
private $status;
/**
* @var \DateTime
*
* @ORM\Column(name="scheduled_date",type="datetime",nullable=false,options={"default"="CURRENT_TIMESTAMP"})
*/
private $scheduledDate;
/**
* @var \DateTime
*
* @ORM\Column(name="creation_date",options={"default"="CURRENT_TIMESTAMP"})
*/
private $creationDate;
/**
* @var \DateTime
*
* @ORM\Column(name="processed_date",nullable=true)
*/
private $processedDate;
}
我正在使用此实体为其他实体创建计划更新。
例如,如果您想在下周一 0800 开始销售新产品,您可以创建一个新的实体更新器,通过“实体名称”选择“产品”作为目标实体,选择所需的产品,其列“状态”并设置它到新值。
我的问题是如何为这个实体创建一个用户友好的表单,该表单可以使用 Symfony5 更新任何其他实体。 我所说的“用户友好”是指:
- 对于
entityId
,能够使用<select>
标记列出所有实体,根据目标实体使用不同的列作为标签。 - 对于
entityColumnName
,能够使用<select>
标签列出该实体的所有列,每列带有正确的标签。 - 对于
entityColumnValue
,能够基于 Symfony Type 类显示正确的表单输入。
下面是“描述”产品表单的 ProductType 示例。当您选择产品作为 ProductType 表单时,我希望我的 EntityUpdater 表单以某种方式具有相同的列/标签/选择。
class ProductType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder,array $options)
{
$builder
->add('name',TextType::class,[
'label' => 'Name','required' => true
])
->add('status',ChoiceType::class,[
'label' => 'Product status','mapped' => true,'required' => true,'choices' => [
'Draft' => 0,'Discontinued' => 1,'Out of stock' => 2,'Online' => 3,]
]);
}
}
这能实现吗?如果是这样,如何?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)