My variable "form" does not exist - Symfony 6

Viewed 29

I try to allow my user to add and update his profile picture. So I created a new function in UserController.php file in order to retrieve the form on login.html.twig.

<?php

namespace App\Controller;

use App\Entity\User;
use App\Form\UserType;
use App\Repository\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\String\Slugger\SluggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class UserController extends AbstractController
{
    #[Route('add_photo', name: 'add_photo')]
    public function addPhoto(
        Request $request,
        UserRepository $userRepository,
        SluggerInterface $sluggerInterface,
        EntityManagerInterface $entityManagerInterface
    ){
        $connected = $this->getUser();
        $useremail = $connected->getUserIdentifier();
        $user = $userRepository->findOneBy(['email' => $useremail]);

        $userform = $this->createForm(UserType::class, $user);
        $userform->handleRequest($request);

        if ($userform->isSubmitted() && $userform->isValid()) {
            $imagefile = $userform->get('photo')->getData();

            if ($imagefile){
                $originalFileName = pathinfo($imagefile->getClientOriginalName(), PATHINFO_FILENAME);
                $safeFileName = $sluggerInterface->slug($originalFileName);
                $newFileName = $safeFileName . '-' . uniqid() . '.' . $imagefile->guessExtension();
    
                $imagefile->move(
                    $this->getParameter('images_directory'),
                    $newFileName
                );
    
                $user->setPhoto($newFileName);
            }

            $entityManagerInterface->persist($user);
            $entityManagerInterface->flush();
            return $this->redirectToRoute('login');
        }

        return $this->renderForm('security/login.html.twig', [
            'user' => $user,
            'form' => $userform,
        ]);
    }

When I go to the route that leads me to login.html.twig, I have this error : Variable "form" does not exist.

1 Answers

When you use a Form to submit data you need a way to tell the html that you're using a 'form'. eg:

 <FORM METHOD='POST' ACTION='http:veriget.php'>

You need a place to get the user data:

 <INPUT TYPE='text' ID='Quantity' NAME='Quantity' SIZE='3' VALUE='1'>

Where ACTION is the page where the data is submitted to by using something like:

 <input type='SUBMIT' name='menu' value='Place Order'>

With PHP I find its easier to use/construct a HTML page for the form. Then submit to a PHP file.

Related