Symdony5.3 — Как передать параметры от Контроллера Службе, потому что служба вызывает запрос репо?

#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 и не подумал о том, чтобы пометить его