Я новичок в Symfony и пытаюсь изучить основы. Я недавно видел этот вопрос , и я хотел узнать, как работает маршрутизация. Поэтому я скопировал Controller1.php
из вопроса и изменил его на UserController.php
this:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class UsersController extends AbstractController
{
/**
* @Route("/listOf/Users", methods={"GET"})
* @param Request $request
* @return JsonResponse
*/
public function list(Request $request)
{
if (empty($request->headers->get('api-key'))) {
return new JsonResponse(['error' => 'Please provide an API_key'], 401);
}
if ($request->headers->get('api-key') !== $_ENV['API_KEY']) {
return new JsonResponse(['error' => 'Invalid API key'], 401);
}
return new JsonResponse($this->getDoctrine()->getRepository('App\Entity\User')->findAll());
}
}
Который действительно, как утверждает OP, работает нормально и возвращает следующий (вручную добавленные данные, используя Sequel Pro) список:
[
{
"id": 14,
"name": "user1 Name"
},
{
"id": 226,
"name": "user2 Name"
},
{
"id": 383,
"name": "user3 Name"
}
]
Таким образом, мой следующий шаг состоял в том, чтобы узнать, как настроить этот список пользователей, чтобы возвращать определенного пользователя с заданным id
. Таким образом, я следовал официальным документам Symfony о маршрутизации . Поэтому я изменил код на следующий:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class UsersController extends AbstractController
{
/**
* @Route("/listOf/Users/{IdUser}", requirements={"IdUser"="\d+"}, methods={"GET"})
* @param Request $request
* @param int $IdUser
* @return JsonResponse
*/
public function list(Request $request, int $IdUser)
{
if (empty($request->headers->get('api-key'))) {
return new JsonResponse(['error' => 'Please provide an API_key'], 401);
}
if ($request->headers->get('api-key') !== $_ENV['API_KEY']) {
return new JsonResponse(['error' => 'Invalid API key'], 401);
}
return new JsonResponse($this->getDoctrine()->getRepository('App\Entity\User\{IdUser}')->findAll());
}
}
и попытался запросить данные пользователя с идентификатором 14, но это не сработало и выдало следующую ошибку:
Class App \ Entity \ User {IdUser} не существует (500 Внутренняя ошибка сервера)
Какие еще изменения мне нужно сделать, чтобы иметь возможность делать то, что я пытаюсь сделать?
Это моя User.php
сущность:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
*/
class User implements \JsonSerializable
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function jsonSerialize()
{
return get_object_vars($this);
}
}
И в моем UserRepository.php
нет ничего, кроме автоматически сгенерированного кода.
Редактировать: Мой первый запрос, который работал, имел форму: http://domainName.local:80/listOf/Users
, а мой второй был: http://domainName.local:80/listOf/Users/14