Symfony 2 - formularze

0

Mam w bazie tabele miesiąca która ma 2 pola textowe. Na stronie muszę wyrenderować form z rokiem za pomocą TWIGa, gdzie będzie każdy miesiąc i dla niego inputy (w których będą dane zaciągnięte z bazy).
Ogólnie próbowałam zrobić własny FormType, by potem w głównymType wywoływać tylko dla każdego miesiąca konkretne dane, niestety nie wyszło mi to najlepiej. W dokumentacji jest tylko jak zrobić custom FIeld dla jednego inputa i to bez użycia danych z bazy.

Jakieś sugestie?

0

Ciężko zrozumieć o co Ci dokładnie chodzi :). Ogólny schemat wygląda tak:

Tworzysz sobie model:

<?php

class Month
{
    private $input1;
    private $input2;

    public function getInput1()
    {
        return $this->input1;
    }

    public function setInput1($input1)
    {
        $this->input1 = $input1;
    }

    public function getInput2()
    {
        return $this->input2;
    }

    public function setInput2($input2)
    {
        $this->input2 = $input2;
    }
}

Najprostszym podejściem jest utworzenie forma w kontrolerze, połączenie go z modelem i przekazanie do widoku:

class MonthController extends Controller
{
    public function monthAction(Request $request)
    {
        $month = new Month();

        $monthForm = $this->createFormBuilder($month)
            ->add('input1', 'text')
            ->add('input2', 'text')
            ->add('submit', 'submit', array('label' => 'Submit month'))
            ->getForm();

        return $this->render('template:name.html.twig', array(
            'monthForm' => $monthForm->createView(),
        ));
    }
}

Potem renderowanie formularza w widoku(najprostsze podejście):

{{ form(monthForm) }}

Jeżeli chciałbyś połączyć to z bazą danych. To już zależy od tego czego używasz. Z Doctrinem wygląda to tak:

class MonthController extends Controller
{
    public function addMonthAction(Request $request)
    {
        $month = new Month();

        $monthForm = $this->createFormBuilder($month)
            ->add('input1', 'text')
            ->add('input2', 'text')
            ->add('submit', 'submit', array('label' => 'Submit month'))
            ->getForm();

        $monthForm->handleRequest($request);

        if ($monthForm->isValid()) {
            $manager = $this->getDoctrine()->getManager();

            $manager->persist($month);
            $manager->flush();
        }

        return $this->render('template:name.html.twig', array(
            'monthForm' => $monthForm->createView(),
        ));
    }
}
0
gaUa69 napisał(a):

Ciężko zrozumieć o co Ci dokładnie chodzi :). Ogólny schemat wygląda tak:

Najprostszym podejściem jest utworzenie forma w kontrolerze, połączenie go z modelem i przekazanie do widoku:

class MonthController extends Controller
{
    public function monthAction(Request $request)
    {
        $month = new Month();

        $monthForm = $this->createFormBuilder($month)
            ->add('input1', 'text')
            ->add('input2', 'text')
            ->add('submit', 'submit', array('label' => 'Submit month'))
            ->getForm();

        return $this->render('template:name.html.twig', array(
            'monthForm' => $monthForm->createView(),
        ));
    }
}

Powyższe rozumiem, sama tak robiłam. :) Jednak mój problem wydaje się znacznie trudniejszy.
Mianowicie powyższe przekazuje tylko form konkretnego miesiąca, a ja potrzebuje połączenie wszystkich miesięcy z danego roku w jeden form. (A rok jest tylko polem w miesiącu, nie osobną tabelą).

0

Wydaje mi się, że coś kombinujesz :). Pewnie chcesz użyć tego: http://symfony.com/doc/current/reference/forms/types/collection.html

Jeżeli nie, to pokaż jak wyglądają twoje modele, coś poradzimy.

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