从通用数据生成Symfony Form



我正在设计一个用于管理报告的应用程序。我正在使用Symfony 3.2.6开发这个 在这张图片中,你可以看到我的数据模型。我想做两件事: 1. 为具有多个给定模块的报表创建新布局 2. 创建此报告的实例并将其保存在数据库中

所以我认为这是使用这个数据模型做到这一点的一种方法,不是吗?但是我现在如何在Symfony中创建表单呢?

我做这样的事情:

$builder
->add('name', TextType::class)
;
foreach ($options['moduleValues'] as $moduleValue)
{
if($moduleValue instanceof RangeModuleValue)
{
$builder->add('value', RangeType::class, array(
'attr' => array(
'min' => $moduleValue->getRangeModule()->getStartValue(),
'max' => $moduleValue->getRangeModule()->getEndValue()
)
));
}
}

但是后来我得到错误:

Neither the property "value" nor one of the methods "getValue()", "value()", "isValue()", "hasValue()", "__get()" exist and have public access in class "ReportBundleEntityReport".

我认为错误很明显,"值"在表格range_module_value中。但是我应该如何更改我的设计或表单来处理这个问题?

注意:父类模块存在,因为将来会有其他模块,如"文本模块"。

这是我的班级报告:

class Report
{
/**
* @var int
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORMColumn(name="name", type="string", length=255)
*/
private $name;
/**
* @ORMManyToOne(targetEntity="ReportBundleEntityReportLayout")
* @ORMJoinColumn(name="layout_id", referencedColumnName="id")
*/
private $layout;
/**
* Report constructor.
* @param int $id
*/
public function __construct($layout)
{
$this->layout = $layout;
}

/**
* @return int
*/
public function getLayout()
{
return $this->layout;
}
/**
* @param int $layout
*/
public function setLayout($layout)
{
$this->layout = $layout;
}
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
*
* @return Report
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}

}

这是类 RangeModuleValue,我想在其中持久保存特定报表的模块值。

class RangeModuleValue
{
/**
* @var int
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORMManyToOne(targetEntity="ReportBundleEntityRangeModule")
* @ORMJoinColumn(name="rangeModule_id", referencedColumnName="id")
*/
private $rangeModule;
/**
* @ORMManyToOne(targetEntity="ReportBundleEntityReport")
* @ORMJoinColumn(name="report_id", referencedColumnName="id")
*/
private $report;
/**
* @var int
*
* @ORMColumn(name="value", type="integer")
*/
private $value;
/**
* RangeModuleValue constructor.
* @param $rangeModule
* @param $report
*/
public function __construct($report, $rangeModule)
{
$this->report = $report;
$this->rangeModule = $rangeModule;
}

/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set rangeModule
*
* @param string $rangeModule
*
* @return RangeModuleValue
*/
public function setRangeModule($rangeModule)
{
$this->rangeModule = $rangeModule;
return $this;
}
/**
* Get rangeModule
*
* @return string
*/
public function getRangeModule()
{
return $this->rangeModule;
}
/**
* Set report
*
* @param string $report
*
* @return RangeModuleValue
*/
public function setReport($report)
{
$this->report = $report;
return $this;
}
/**
* Get report
*
* @return string
*/
public function getReport()
{
return $this->report;
}
/**
* Set value
*
* @param integer $value
*
* @return RangeModuleValue
*/
public function setValue($value)
{
$this->value = $value;
return $this;
}
/**
* Get value
*
* @return int
*/
public function getValue()
{
return $this->value;
}

}

在类报告中,您添加此函数以允许添加许多$rangeModule$value

public function addrangemodule (RangeModuleValue $rangeModule)
{
$day->setIdReport($this);
$this->ranges->add($day);
}

但是ranged应该是一个数组集合:

public function setranges(ArrayCollection $ranges)
{
$this->ranges= $ranges;
}

在控制器中添加尽可能多的您需要: $range = new RangeModuleValue((;

$report->addrangemodule ($range);

这段代码只是一个例子,我不确定他是否有效。

有关更多信息,这是文档:

https://symfony.com/doc/current/form/form_collections.html

http://www.doctrine-project.org/api/common/2.3/class-Doctrine.Common.Collections.ArrayCollection.html

相关内容

  • 没有找到相关文章

最新更新