Autor Wątek: Cała tabela danych w jednym formularzu  (Przeczytany 205 razy)

solar2017

  • Newbie
  • *
  • Wiadomości: 4
    • Zobacz profil
Cała tabela danych w jednym formularzu
« dnia: Styczeń 09, 2018, 19:46:05 »
Witajcie

Nie wiem jak podejść do realizacji takiego formularza.
Mam tabelę w bazie - proste sprawozdanie - Imię nazwisko i parę pól z liczbami.
Mogę to wyświetlić ładnie w tabelce, mogę edytować w formularzu pojedynczy rekord z bazy - to ogarniam, nie ma problemu - działa.

Ale chciałem pobrać z bazy wszystkie rekordy (max około 100 sztuk) i wyświetlić je wszystkie w jednym formularzu w postaci tabeli - jeden wiersz - jeden rekord.
Chcę mieś możliwość edytowania wszystkich na raz - nie pojedynczo.
Do tego submit, tak żeby zapisać wszystkie do właściwych miejsc.

Zrobiłem formularz dla pojedynczego rekordu, i drugi - taki wrapper do którego chcę inkludować odpowiednią ilość tych pojedynczych. Próbowałem to z CollectionType, ale coś mi nie działa.
Może ktoś będzie w stanie podpowiedzieć w jakim kierunku podążać żeby to zrobić?

Poniżej trochę kodu:

Akcja w kontrolerze:
$spr = $repoSpr->getSprawozdanie(); <- tu dostaję tablicę z rekordami typu entity
$form = $this->createForm(SprawozdanieWrapperType::class, $spr);

SprawozdanieType.php
namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class SprawozdanieType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('nazwiskoImie');
        $builder->add('wartość1');
        $builder->add('wartość2');
        $builder->add('wartość3');
    }
   
    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Sprawozdanie',
        ));
    }

    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'appbundle_sprawozdanie';
    }
}

SprawozdanieWrapperType.php
namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use AppBundle\Entity\Sprawozdanie;

class SprawozdanieWrapperType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('persons', CollectionType::class,array(
            'entry_type' => SprawozdanieType::class,
        ));

    }
   
    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => Sprawozdanie::class,
        ));
    }

    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'appbundle_sprawozdanie_wrapper';
    }
}