私は3つのエンティティ持っている:記事、著者、Reivews:Symfonyでは:どのようにして、関連するエンティティに外部キーフィールドを含めずにフォームを埋め込むことができますか?
関係:
- 記事はひとつ著者を持っています。
- 記事には多くのレビューがあります。
- 著者には多くの記事があります。
- レビューには1人の著者がいます。
- レビューには1つの記事があります。
著者は記事とレビューの両方を作成します。彼らはアプリのユーザーです。
私は、記事のSHOWビューに著者、記事、レビューエンティティの組み合わせを埋め込もうとしています。しかし、ユーザー(作成者)が提供する入力のみ。
使用例:ユーザー(著者)が記事のSHOWビューにあります。彼は、レビューを残すように求め、フォームフィールドが含まれている:
- 評価(レビューエンティティ)
- レビュータイトル(レビューエンティティ)
- 名(著エンティティ)
- メール(著エンティティ)
表示されている記事は表示しないでください。私たちはある時点でその背後でそれをつかみ、新しいReviewのarticle_idにコードを埋め込むことができます。
私はしばらくこの作業を続けてきました。フォームやイベントで何かをしなければならないと思いますか?ここで私はどこにいるのですか(これは遠くない...)
この試みでは、フィールドをオートポピュレートしてから隠しフィールドを使用することを検討していました....私はあまりそれをしません。あなたが提供することができ、任意の入力のために、事前にのarticle_idに
class ReviewType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('review')->add('title');
//$builder->add('article', HiddenType::class);
$builder->add('author', AuthorType::class, array("label" => FALSE));
$builder->add('rating', ChoiceType::class, array(
'choices' => array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' =>'5'),
'expanded' => true,
'multiple' => false
));
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function (\Symfony\Component\Form\FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
$article = $data->getArticle();
$articleId = null === $article ? array() : $article->getId();
$form->add('article', ArticleType::class, array("label" => FALSE));
}
);
}
感謝を操作できるように、私は人々にチャンスを与えることが好きではありません!
ありがとうございます!いい考えだ。あなたが気にしないなら、私がまだ混乱しているいくつかのことを明確にしましょう:私たちはまだArticleType-> buildForm正しい形式でフォームを構築しますか?私が著者とレビューフォームの要素を追加すると、私の標準的な記事の追加/編集フォームが乱れることはありませんか?私はどのようにこれを処理するか分からない。再度、感謝します! – user2305673
はい、いつものようにフォームを構築できます。あなたは 'ReviewType'と' addEventListener'から 'author'フィールドを削除するべきです。次に、レビューの永続性を管理するコントローラで、著者IDと記事IDを設定できます。なぜ-1? – ste
それは完璧です、助けてくれてありがとう。私はなぜ/誰がdownvoteを与えたのか分からない。彼らは理由を挙げていませんでしたが、あなたのソリューションは私にとって完璧に機能します。 – user2305673