Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Salvare le modifiche al profilo

Impariamo a salvare le modifiche al profilo di un utente in un social network creato con il framework PHP Symfony
Impariamo a salvare le modifiche al profilo di un utente in un social network creato con il framework PHP Symfony
Link copiato negli appunti

Finora ci siamo occupati di creare il form e di mostrarlo all'interno della pagina ma ci sono ancora un paio di passaggi per completare la prima parte del nostro lavoro:

  • salvare le informazioni del profilo al submit del form;
  • migliorare l'aspetto grafico del form.

Li approfondiremo entrambi prima di dedicarci al vero ultimo passaggio necessario per considerare completa la pagina: permettere all'utente di effettuare l'upload dell'avatar.

Salvare le informazioni del profilo al submit della Form

La semplicità dei form di Symfony si percepisce in tutte le fasi di utilizzo. Se ricordiamo dalla lezione in cui abbiamo creato il form, infatti, abbiamo definito nel metodo EditProfileType::configureOptions() l'entità collegata al form.

Questo vuol dire che, qualora il form compilato dall'utente sia valido, è possibile recuperare un modello che conterrà già i nuovi dati e sarà pronto per essere persistito sul database. Vediamolo in dettaglio modificando il controller come segue:

use Symfony\Component\HttpFoundation\Request;
/**
 * @Route("/profile/edit", name="app_edit_profile")
 */
public function editProfile(Request $request): Response
{
    $form = $this->createForm(EditProfileType::class, $this->getUser());
    $form->handleRequest($request);
    if ($form->isSubmitted() && $form->isValid()) {
        $user = $form->getData();
        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->persist($user);
        $entityManager->flush();
        $this->addFlash('success', "Profile has been success fully updated!");
        return $this->redirectToRoute('index');
    }
    return $this->render('user/edit_profile.html.twig', [
        'form' => $form->createView()
    ]);
}

Vediamo ora quali sono state le modifiche apportate:

  1. abbiamo iniettato la Request nella nostra action, ci servirà per recuperare le informazioni del form;
  2. abbiamo richiamato il metodo $form->handleRequest($request) con cui l'oggetto Form trasferisce i dati dalla request al modello;
  3. abbiamo aggiunto un blocco in cui verifichiamo che, qualora il form sia stato inviato e che i dati inseriti siano validi, recuperiamo la nuova entità contenente i dati aggiornati ($form->getData()) e li persistiamo sul database;
  4. effettuiamo un redirect in home page una volta salvati i dati mostrando un flash bag message con un messaggio di successo.

Non abbiamo bisogno di altro per consentire l'aggiornamento del profilo. Questo perché $form->isValid() si occupa di effettuare tutte le validazioni che indicheremo per il form e, qualora qualche validazione non andasse a buon fine, verrebbero automaticamente mostrati i messaggi di errore in pagina.

Per adesso non abbiamo aggiunto alcuna validazione ma approfondiremo l'argomento durante l'upload.

Indicare i campi del form come non obbligatori

Avendo deciso che i nostri campi non sono obbligatori, abbiamo bisogno di un ulteriore passaggio altrimenti, provando ad effettuare il submit del form con un campo vuoto, riceveremmo un messaggio di errore dal frontend che ci indica che quel campo è obbligatorio. Modifichiamo quindi il metodo: EditProfileType::buildForm come segue:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('fullName', TextType::class, ['required' => false])
        ->add('bio', TextareaType::class, ['required' => false])
        ->add('avatar', UrlType::class, ['required' => false])
        ->add('submit', SubmitType::class);
}

In questo modo indichiamo al frontend che i campi possono anche essere vuoti.

In attesa di completare il campo avatar affinché permetta l'upload dell'immagine, per consentire il corretto funzionamento delle immagini abbiamo bisogno di salvare il valore del campo con un URL completo, ad esempio: http://kvak.local/assets/img/ryan.jpg.

Il codice della lezione è disponibile al tag save-profile.

Ti consigliamo anche