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.