Платформа API использует Post для получения данных с помощью вводаPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Платформа API использует Post для получения данных с помощью ввода

Сообщение Anonymous »

Я работаю с платформой Api, Symfony и Doctrine. Я ожидаю JSON объекта от моего внешнего интерфейса, который необходим для получения данных из моего внутреннего интерфейса. Поскольку запросы GET не имеют/не должны иметь тела, я считаю, что операция Post() — лучший способ достичь моей цели. Я добавил к своей сущности атрибут, который выглядит следующим образом:

Код: Выделить всё

#[ORM\Entity(repositoryClass: EntityRepository::class)]
#[ApiResource(
operations: [
new Post(
input: InputDto::class,
provider: StateProvider::class,
output: OutputDto::class,
uriTemplate: 'entity/{variable}',
uriVariables: ['variable' => 'variable'],
)
]
)]
Мой поставщик состояний похож на следующий пример:

Код: Выделить всё

class StateProvider implements ProviderInterface
{
public function __construct(
private RequestStack $requestStack
)
{
$this->requestStack = $requestStack;
}

public function provide(Operation $operation, array $uriVariables = [], array $context = []): object|array|null
{
$variable = $uriVariables['variable'] ?? null;

// logic

$outputDto = new OutputDto($dataProcuredFromLogic);

return $outputDto;
}
}
Похоже, логика работает нормально. Если я добавлю print_r($outputDto); непосредственно перед оператором return, я получу именно те данные, которые ожидал. Но при выполнении запроса ответом является тот же самый InputDto, который я отправил через тело запроса, а не возвращенный $outputDto поставщика.
Это заставляет меня задаться вопросом, возможно ли вообще то, чего я надеялся достичь.
Я пытался использовать процессор состояний вместо поставщика и использовал ту же самую логику. Единственное отличие заключается в том, что мне не нужен RequestStack для получения входных данных, поскольку он находится в параметрах методаprocess(), и мне пришлось изменить тип возвращаемого значения методаprocess() на мой OutputDto. Я получил ошибку, которая выглядела следующим образом:

Код: Выделить всё

"[Semantical Error] line 0, col 75 near 'property = :property_p1': Error: Class App\\Entity\\Entity has no field or association named property"
Я предполагаю, что это как-то связано с Doctrine, поскольку ":property_p1" напоминает параметр, установленный в QueryBuilder, но, как я уже сказал, логика, включая мои запросы DQL, похоже, работала нормально, когда я распечатывал результаты с помощью print_r().
Я не уверен, стоит ли мне использовать контроллер, как я прочитали, что в документации платформы API это не рекомендуется.
Не могли бы вы помочь мне вернуть фактический желаемый результат?
Заранее благодарим вас за любую помощь, которую вы можете оказать!

Подробнее здесь: https://stackoverflow.com/questions/769 ... g-an-input
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»