Symfony many to many dodatkowe pola

0

Hej, mam w symfony3 + doctrine relację many to many z dodatkowymi polami, zrealizowane jest to mniej więcej tak, ze mam encje Projekt, Produkt i encję łączącą w której są dodatkowe pola ilość itp, chodzi o to że wiele projektów może mieć wiele produktów, problem jest teraz jak wyświetlić takie coś na standardowym form builderze z symfony

//Encja Project
/**
     * @var \Doctrine\Common\Collections\Collection
     * @ORM\OneToMany(targetEntity="ProjectProducts", mappedBy="project")
     */
    private $products;
//ProjectProducts
    /**
     * @var Project
     * @ORM\ManyToOne(targetEntity="Project", inversedBy="products")
     * @ORM\JoinColumn(name="project_id", referencedColumnName="id")
     */
    private $project;

    /**
     * @var Product
     * @ORM\ManyToOne(targetEntity="Product", inversedBy="projects")
     * @ORM\JoinColumn(name="product_id", referencedColumnName="id")
     */
    private $product;

    /**
     * @var int
     *
     * @ORM\Column(name="quantity", type="integer")
     */
    private $quantity;
//Product

    /**
     * @var \Doctrine\Common\Collections\Collection
     * @ORM\OneToMany(targetEntity="ProjectProducts", mappedBy="product")
     */
    private $projects;

Jeśli mam coś takiego w form builderze dla ProjectType

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('products');
    }

To generowany jest select z tym co znajduje się w tabeli pośredniczącej, a chciałbym żeby było generowane to co jest w tabeli z produktami i dodatkowo input z możliwością wpisania ilość.
Jak najlepiej to zrobić? Stworzyć własny typ który będzie mapował encje łączącą na produkty? dodatkowo jak obsłużyć dynamicznie generowane inputy tak żeby dało się dodawań n produktów?

0

Encja nie musi zawsze być obsługiwana przez formy, podobnie jak formularze nie muszą zawierać pól reprezentowanych przez encje. Generalnie tego typu formularze nie są dość uciążliwe. Ten artykuł może się przydać: http://symfony.com/doc/current/form/dynamic_form_modification.html.

Można też to zrobić tak że formularz zawiera niemapowane pola, takie jak w twojej relacyjnej tabeli a ich obsługę zapewniasz sobie w kontrolerze (lub jeszcze lepiej jeśli kontroler odwoła się do managera zarejestrowanego jako serwis do obsługi twojego tworu).

Jeżeli chcesz dodać dynamicznie pola to oczywiście jakimś js'ikiem... jednak aby formularz przeszedł walidację i dodał nowe pola do obiektu będziesz musiał wykorzystać FormEventy, i przed wysłaniem formularza dodać te nowe pola (FormEvents::PRE_SET_DATA).

1 użytkowników online, w tym zalogowanych: 0, gości: 1