Bom dia, eu estou tendo um problema ao chamar /especialidades, estou seguindo o professor passo a passo, mas eu não sei o que estou fazendo de errado :(
O erro:
The controller for URI "/especialidades" is not callable. Expected method "buscarTodas" on class "App\Controller\EspecialidadesController", did you mean "buscarTodos"?
Minha rota:
especialidades:
path: /especialidades
controller: App\Controller\EspecialidadesController::buscarTodos
methods:
- GET
medicos:
path: /medicos
controller: App\Controller\MedicosController::buscarTodos
methods:
- GET
Minha EspecialidadeController.php:
<?php
namespace App\Controller;
use App\Entity\Especialidade;
use App\Repository\EspecialidadeRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class EspecialidadesController extends BaseController
{
/**
* @var EntityManagerInterface
*/
private $entityManager;
/**
* @var EspecialidadeRepository
*/
private $repository;
public function __construct(
EntityManagerInterface $entityManager,
EspecialidadeRepository $repository
) {
parent::__construct($repository);
$this->entityManager = $entityManager;
$this->repository = $repository;
}
/**
* @Route("/especialidades", methods={"POST"})
*/
public function nova(Request $request): Response
{
$dadosRequest = $request->getContent();
$dadosEmJson = json_decode($dadosRequest);
$especialidade = new Especialidade();
$especialidade->setDescricao($dadosEmJson->descricao);
$this->entityManager->persist($especialidade);
$this->entityManager->flush();
return new JsonResponse($especialidade);
}
/**
* @Route("/especialidades/{id}", methods={"GET"})
*/
public function buscarUma(int $id): Response
{
return new JsonResponse($this->repository->find($id));
}
/**
* @Route("/especialidades/{id}", methods={"PUT"})
*/
public function atualiza(int $id, Request $request): Response
{
$dadosRequest = $request->getContent();
$dadosEmJson = json_decode($dadosRequest);
$especialidade = $this->repository->find($id);
$especialidade
->setDescricao($dadosEmJson->descricao);
$this->entityManager->flush();
return new JsonResponse($especialidade);
}
/**
* @Route("/especialidades/{id}", methods={"DELETE"})
*/
public function remove(int $id): Response
{
$especialidade = $this->repository->find($id);
$this->entityManager->remove($especialidade);
$this->entityManager->flush();
return new Response('', Response::HTTP_NO_CONTENT);
}
}
Minha BaseController.php:
<?php
namespace App\Controller;
use Doctrine\Common\Persistence\ObjectRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
abstract class BaseController extends AbstractController
{
/**
* @var ObjectRepository
*/
private $repository;
public function __construct(ObjectRepository $repository)
{
$this->repository = $repository;
}
public function buscarTodos(): Response
{
$entityList = $this->repository->findAll();
return new JsonResponse($entityList);
}
}