私はレポートを管理するためのアプリケーションを設計しています。私はSymfony 3.2.6でこれを開発しています。このpictureに私のデータモデルを見ることができます。私は二つのことをしたい: 1.このレポートのインスタンスを作成し、データベース一般的なデータからSymfonyフォームを生成する
に保存 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 "ReportBundle\Entity\Report".
私はエラーが「値」は、テーブルrange_module_valueであり、明らかだと思います。しかし、これを処理するために私のデザインやフォームをどのように変更する必要がありますか?
注:今後、「TextModule」のような他のモジュールが存在するため、親クラスModuleが存在します。
class Report
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @ORM\ManyToOne(targetEntity="ReportBundle\Entity\ReportLayout")
* @ORM\JoinColumn(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は、次のとおりです。ここで
は、私のクラスは、報告書です。あなたは多くの$rangeModule
または$value
追加できるようにするには、この機能を追加し、クラスレポートで
class RangeModuleValue
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="ReportBundle\Entity\RangeModule")
* @ORM\JoinColumn(name="rangeModule_id", referencedColumnName="id")
*/
private $rangeModule;
/**
* @ORM\ManyToOne(targetEntity="ReportBundle\Entity\Report")
* @ORM\JoinColumn(name="report_id", referencedColumnName="id")
*/
private $report;
/**
* @var int
*
* @ORM\Column(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;
}
}
私はあなたのエンティティに()関数addValueを追加する必要があると思います:
は、より多くの情報については、これはドキュメントです。投稿にエンティティ(クラス)を追加できますか? –
こんにちはMelik、あなたの編集のおかげで。レポートクラスとrangeModuleValueクラスを追加しました(そこに値を保持したい)。データベース設計を編集する必要がありますか?それともこのデザインで可能ですか? –