Usare la funzione submit() per gestire l’invio di form

Nuovo nella versione 2.3: Il metodo handleRequest() è stato aggiunto in Symfony 2.3.

Con il metodo handleRequest, la gestione dell’invio di form è veramente facile:

use Symfony\Component\HttpFoundation\Request;
// ...

public function newAction(Request $request)
{
    $form = $this->createFormBuilder()
        // ...
        ->getForm();

    $form->handleRequest($request);

    if ($form->isValid()) {
        // eseguire qualche azione...

        return $this->redirect($this->generateUrl('task_success'));
    }

    return $this->render('AcmeTaskBundle:Default:new.html.twig', array(
        'form' => $form->createView(),
    ));
}

Suggerimento

Per approfondire questo metodo, leggere Gestione dell’invio del form.

Richiamare Form::submit() a mano

Nuovo nella versione 2.3: Prima di Symfony 2.3, il metodo submit() si chiamava bind().

In alcuni casi, si desidera un maggior controllo sull’esatto invio del form e su quali dati siano passati. Invece di usare il metodo handleRequest() method, si possono passare i dati inviati direttamente a submit():

use Symfony\Component\HttpFoundation\Request;
// ...

public function newAction(Request $request)
{
    $form = $this->createFormBuilder()
        // ...
        ->getForm();

    if ($request->isMethod('POST')) {
        $form->submit($request->request->get($form->getName()));

        if ($form->isValid()) {
            // eseguire qualche azione...

            return $this->redirect($this->generateUrl('task_success'));
        }
    }

    return $this->render('AcmeTaskBundle:Default:new.html.twig', array(
        'form' => $form->createView(),
    ));
}

Suggerimento

I form con campi innestati si aspettano un array in submit(). Si possono anche inviare singoli campi, richiamando submit() direttamente sul campo:

$form->get('firstName')->submit('Fabien');

Passare Request a Form::submit() (deprecato)

Nuovo nella versione Prima: di Symfony 2.3, il metodo submit era noto come bind.

Prima di Symfony 2.3, il metodo submit() accettava un oggetto Symfony\Component\HttpFoundation\Request come scorciatoia per l’esempio precedente:

use Symfony\Component\HttpFoundation\Request;
// ...

public function newAction(Request $request)
{
    $form = $this->createFormBuilder()
        // ...
        ->getForm();

    if ($request->isMethod('POST')) {
        $form->submit($request);

        if ($form->isValid()) {
            // eseguire qualche azione...

            return $this->redirect($this->generateUrl('task_success'));
        }
    }

    return $this->render('AcmeTaskBundle:Default:new.html.twig', array(
        'form' => $form->createView(),
    ));
}

Si può ancora passare Symfony\Component\HttpFoundation\Request direttamente a submit(), ma ora è deprecato e sarà rimosso in Symfony 3.0. Si dovrebbe usare invece handleRequest().

Tabella dei contenuti

Argomento precedente

Configurare dati vuoti per una classe Form

Argomento successivo

Come usare l’opzione Virtual nei form

Questa pagina