Я пытаюсь выполнить запрос PUT для объекта, от углового 5-го клиента до платформы API.
С другой стороны, я получаю адрес с помощью карт Google.Этот адрес является свойством Entity JourneyAddress, поэтому я отправляю запрос PUT на API Platform с моей моделью JourneyAddress со свойством address, которое представляет собой массив компонентов адреса карты Google (street_address, locality и т. Д.).
Теперь мне нужно выполнить некоторые операции с этим свойством перед отправкой его в Doctrine, т. Е. Мне нужно сопоставить местоположение, указанное Google, с местоположением в нашей базе данных.
Я думал о слушателе, который будет слушатьдля событий JourneyAddress prePersist и preUpdate найдите нужный мне экземпляр местоположения с помощью чего-то вроде LocalityRepository :: findBy (['name' => 'Paris']), обновите экземпляр tripAddress и верните его Doctrine для выполнения операций сохранения / обновления.
Проблема заключается в том, что API Platform проверяет, соответствует ли тип представленных данных тому, что ожидает Doctrine.Я отправил API Platform массив, но Doctrine действительно ожидает строку.
Для контекста отправляемый массив может быть:
src/Doctrine/EventListener/JourneyAddressListener.php:32:
object(App\Entity\JourneyAddress)[2615]
private 'id' => null
private 'title' => string 'dzfkdqsmlfjsldkflm' (length=18)
private 'search' => string 'mlsqjfkldsjfsqdjlmf' (length=19)
private 'address' =>
array (size=8)
'street_number' => string '2650' (length=4)
'route' => string 'Avenida Rivadavia' (length=17)
'sublocality_level_1' => string 'Balvanera' (length=9)
'administrative_area_level_2' => string 'Comuna 3' (length=8)
'administrative_area_level_1' => string 'Buenos Aires' (length=12)
'country' => string 'Argentine' (length=9)
'postal_code' => string 'C1034' (length=5)
'postal_code_suffix' => string 'ACS' (length=3)
private 'latitude' => float 50.6507791
private 'longitude' => float 3.0657951
private 'media' => null
private 'indication' => string 'klqsjflkmqjfkqjfksflmlqfmlks' (length=28)
Мне нужно извлечь street_address и сохранить его как адрес.свойство моего JourneyAddress, но сущность Doctrine:
/**
* @ORM\Column(type="string", length=255)
* @Groups("journey")
* @Assert\Type("string")
* @Assert\NotBlank(
* message = "Le champs 'Adresse du point de départ' doit être rempli",
* groups={"departureFormValidation"}
* )
*/
private $address;
Есть ли способ, которым мой слушатель будет использоваться перед фактической проверкой типа платформы API?Я также пытался выполнить пользовательскую операцию, но результат был тем же, проверка типов всегда идет первой и предотвращает любые дальнейшие действия.
Я, конечно, мог бы заменить тип адреса на массив и затем отправить ['myстрока '], но я кормлю это не должно быть так.