私はCasesも持っていますが、これには添付ファイルもあります。これは、OneToManyとAttachmentエンティティの関連付けを持つCaseエンティティとしてコード化されています。 Attachmentエンティティには、ManyToOneのCaseエンティティへの関連があります。コード:symfony symfony3 new single ManyToOneオブジェクト(関連の所有側)
class Case {
/**
* @var integer
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="Attachment", mappedBy="case",cascade={"persist"})
*/
protected $attachments;
class Attachment
{
/**
* @var integer
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Case", inversedBy="attachments")
* @ORM\JoinColumn(name="case_id", referencedColumnName="id")
*/
protected $case;
}
私は以下を試しています。私は1つのページにケース全体を表示/開くふりをします。ページの中に、添付ファイルリストがあります。そのリストの終わりに、私は新しい添付ファイル提出のためのフォームを置くふりをします。
私は大文字小文字を表示するためのコントローラを作成しました。新しい添付フォーム(AttachmentType)を作成してtwigテンプレートの途中に配置し、そのアクションのレンダリング呼び出しを引数として渡しました。
// CaseController.php
/**
* @Route("/cases/show/{case}", name="showCase", requirements={ "case" : "\d+" })
*/
public function showCaseAction(Request $request, $case)
{
$theCase = $this->getDoctrine()->getRepository('AppBundle:Case')->findOneById($case);
$attachment = new Attachment();
$attachment->setCase($theCase);
$attachmentForm = $this->createForm(AttachmentType::class, $attachment);
if (! $theCase) {
$this->addFlash('danger', $this->get('translator')->trans('cases.show.case_not_found', [ '%case%' => $case ]));
}
return $this->render('cases/caseContainer.html.twig', array('case' => $theCase, 'attachmentform' => $attachmentForm->createView()));
}
また、コントローラにnewAttachmentActionを書き込んで添付ファイルを作成しました。
ここで自分のコードを書き留めません。私は可能な答えを条件付けしたくない。
私の問題は、newAttachmentActionが呼び出されたときに、Caseオブジェクトを回復する方法を理解できないため、関連付けることができるということです。 Caseオブジェクトを格納するために何か(HiddenType、EntityTypeなど)をAttachment Form Builderに配置する必要があるかどうか、あるいは他のSymfonyのメカニズム(Services、Closure、StorageTokens)を使用する方がよいかどうかはわかりません。私はウェブ上で幅広い検索をしましたが、私はいくつかの記事を読んだことがあります。おそらく、適切な検索キーワードがありません。
私は自分自身を明確にしたいと思っています。だから誰かが私に正しい方向に例やチュートリアルを見つけることができます。
多くの方々のお時間をお待ちしております。
こんにちはを持つことになり、再び 私は、検索を維持してきました。私は目標を達成するために役立つものを見つけました:DataTransformers。しかし、私はこの解決策とはまったく違和感がありません。フォームを受け取ったときにCaseオブジェクトを取得できるように、CaseオブジェクトのID値を含むフォームに非表示フィールドを含めるには、機能しますが、HTMLフォームフィールドの値は現代のブラウザデバッグツールで簡単に変更できます。 私は、CSFRトークンとCaseオブジェクトの間の一種のサーバー側の関連付けについて考えていました。 このような提案はありますか? –