'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 |
