#symfony #api-platform.com
Вопрос:
Я работаю над проектом, в котором Symfony выступает в качестве серверной части API (с ApiPlatform), а внешний интерфейс и ведущий решили, что мы будем использовать Сервисы и создадим функцию внутри под названием updateData().
На моей Службе:
public function updateData(array $dates, Hotel $hotel): ?array
{
$bookings= $this->em->getRepository(Booking::class)->findAllByIdAndDate($id, $date);
foreach ($bookings as $booking) {
...
}
...
}
В моем контроллере:
/**
* @Route("/update_data", name="update_data")
*/
public function index(UpdateData $updateData)
{
$this->em = $this->getDoctrine()
->getManager()
->getRepository(Hotel::class);
$date = new DateTime('2021-06-13');
$id = 1;
$hotel = $this->em->find($id);
$message = $updateData->updateData([$date], $hotel);
}
Мой вопрос в том, как я могу получить данные здесь и передать параметры с этого контроллера в службу?
Спасибо
Ответ №1:
Чтобы обновить данные для конкретного отеля, вы можете использовать параметры URL или параметры запроса для настройки своего контроллера.
например, вы можете использовать такой URL-адрес: /update_data/1?date=2021-06-13
Тогда ваш код будет использовать параметры маршрута Symfony и преобразование параметров.
Вот краткий пример того, как это будет выглядеть.
/**
* @Route("/update_data/{id<d >}", name="update_data")
*/
public function update_data(Hotel $hotel, Request $request): Response
{
// the $hotel variable is autoconverted using parameter conversion
$date = new DateTime($request->query->get('date'));
$message = $updateData->updateData([$date], $hotel);
// rest of your code.
}
Комментарии:
1. Привет @Флоран Дестремо, ты прав. Я совсем забыл создать этот контроллер с параметрами. Но могу ли я переслать их к себе на службу?
2. Это прямо в коде, который вы написали: вы вводите свою службу в свой контроллер, а затем вызываете свою функцию. видишь symfony.com/doc/current/controller.html#fetching-services
3. @SamBath это помогло ? Вы можете отметить вопрос решенным, если это так 🙂
4. ДА. Спасибо. Извините, в эти дни я не был на StackOverflow и не подумал о том, чтобы пометить его