'Controller does not read the method from the Repository

Good afternoon, I have this issue where the Admin Controller is not reading the method findBynom from the UserRepository even everything is included here is my code:

here is the UserRepository:

  <?php

namespace App\Repository;

use App\Entity\User;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\OptimisticLockException;
use Doctrine\ORM\ORMException;
use Doctrine\ORM\Query\ResultSetMapping;
use Doctrine\Persistence\ManagerRegistry;

/**
 * @method User|null find($id, $lockMode = null, $lockVersion = null)
 * @method User|null findOneBy(array $criteria, array $orderBy = null)
 * @method User[]    findAll()
 * @method User[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
 */
class UserRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, User::class);
    }


    /**
     * @param $type
     * @return int|mixed|string
     */

    public function findBynom($type)
    {
        return $this->createQueryBuilder('p')
            ->Where('p.fullname LIKE :type')
            ->setParameter('type','%'.$type.'%')
            ->getQuery()
            ->getResult()
            ;
    }
    public function findByMail($type)
    {
        return $this->createQueryBuilder('p')
            ->Where('p.email LIKE :type')
            ->setParameter('type','%'.$type.'%')
            ->getQuery()
            ->getResult()
            ;
    }
  
    // /**
    //  * @return User[] Returns an array of User objects
    //  */
    /*
    public function findByExampleField($value)
    {
        return $this->createQueryBuilder('u')
            ->andWhere('u.exampleField = :val')
            ->setParameter('val', $value)
            ->orderBy('u.id', 'ASC')
            ->setMaxResults(10)
            ->getQuery()
            ->getResult()
        ;
    }
    */


    public function findOneBySomeField($value): ?User
    {
        return $this->createQueryBuilder('u')
            ->andWhere('u.activation_token = :val')
            ->setParameter('val', $value)
            ->getQuery()
            ->getOneOrNullResult()
        ;
    }

}

and here is the AdminController:

<?php

namespace App\Controller;
use App\Entity\User;
use App\Repository\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use GuzzleHttp\Psr7\Request;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;

/**
 * @Route("/admin", name="admin_")
*/
class AdminController extends AbstractController
{
    
    /**
     * Liste les utilisateur du side 
     * @Route("/", name="users", methods={"GET"})
    */

    public function index(UserRepository $users){
        return $this->render("admin/index.html.twig",[
            'users'=> $users->findAll()
        ]);
    }
    /**
     * @Route("/new", name="app_admin_new", methods={"GET", "POST"})
     */
    public function new(Request $request, UserRepository $userRepository): Response
        {
            $user = new User();
            $form = $this->createForm(UserType::class, $user);
            $form->handleRequest($request);
    
            if ($form->isSubmitted() && $form->isValid()) {
                $file = $form->get('Photo')->getData();
                $Filename = md5(uniqid()).'.'.$file->guessExtension();
                
                    $file->move(
                        $this->getParameter('images'),
                        $Filename
                    );
               
                $user->setPhoto($Filename);
                $userRepository->add($user);
                return $this->redirectToRoute('app_admin_index', [], Response::HTTP_SEE_OTHER);
            }
    
            return $this->render('admin/new.html.twig', [
                'user' => $user,
                'form' => $form->createView(),
            ]);
        }
    

     /**
     * @Route("/{id}", name="app_admin_show", methods={"GET"})
     */
    public function show(User $user): Response
    {
        return $this->render('admin/show.html.twig', [
            'user' => $user,
        ]);
    }

    /**
     * @Route("/{id}/edit", name="app_admin_edit", methods={"GET", "POST"})
     */
    public function edit(Request $request, User $user, UserRepository $userRepository): Response
    {
        $form = $this->createForm(UserType::class, $user);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $userRepository->add($user);
            return $this->redirectToRoute('app_admin_index', [], Response::HTTP_SEE_OTHER);
        }

        return $this->render('admin/edit.html.twig', [
            'user' => $user,
            'form' => $form->createView(),
        ]);
    }

    /**
     * @Route("/{id}", name="app_admin_delete", methods={"POST"})
     */
    public function delete(Request $request, User $user, UserRepository $userRepository): Response
    {
        if ($this->isCsrfTokenValid('delete'.$user->getId(), $request->request->get('_token'))) {
            $userRepository->remove($user);
        }

        return $this->redirectToRoute('app_admin_index', [], Response::HTTP_SEE_OTHER);
    }
    /**
     * @Route("/{id}/ban", name="admin_ban", methods={"GET", "POST"})
     */
    public function ban(Request $request, User $user, EntityManagerInterface $entityManager): Response
    {
        if ($this->isCsrfTokenValid('ban'.$user->getId(), $request->request->get('_token'))) {

            $user->setIsBanned(true);


            $entityManager->flush();


        }
        return $this->redirectToRoute('admin_index', [], Response::HTTP_SEE_OTHER);
    }
    /**
     * @Route("/{id}/unban", name="admin_unban", methods={"GET", "POST"})
     */
    public function unban(Request $request, User $user, EntityManagerInterface $entityManager): Response
    {
        if ($this->isCsrfTokenValid('unban'.$user->getId(), $request->request->get('_token'))) {

            $user->setIsBanned(false);


            $entityManager->flush();


        }
        return $this->redirectToRoute('admin_index', [], Response::HTTP_SEE_OTHER);
    }
     /**
     * @Route("/searchuser", name="utilsearchuser")
     */
    public function searchPlan($searchString): JsonResponse
    {
        $serializer = new Serializer([new ObjectNormalizer()]);
        $repository = $this->getDoctrine()->getRepository(User::class);
        $users = $repository->findBynom($searchString);
        $data=$serializer->normalize($users);
        return new JsonResponse($data);

    }
    



}

thanks for your help! adzdafzferfzfaefzrfzrgd a aefzk ff ae ae ak,er ear ae rea rak aer !



Solution 1:[1]

Most likely you didn't specify UserRepository in annotations to your entity. Just declare the repositoryClass parameter in your entity

/** 
 * @ORM\Entity(repositoryClass=UserRepository::class)
 */
class User  

Then you can get an instance of your repository:

$users = $this->getDoctrine()->getRepository(User::class)->findBynom($searchString);

Or you can specify the UserRepository in an attribute of your method, after which the Dependency Injection Component will include it

/**
 * @Route("/searchuser", name="utilsearchuser")
 */
public function searchPlan($searchString, UserRepository $userRepository): JsonResponse
{
    $serializer = new Serializer([new ObjectNormalizer()]); 
    $users = $userRepository->findBynom($searchString);
    $data=$serializer->normalize($users);
    return new JsonResponse($data);

}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1