Output
Output это объекты, которые хранят данные для передачи пользователю. Добавьте все необходимые поля в объекты, пометьте из специальным аттрибутом и они будут превращениы в json с помощью Symfony Serializer
Создадм аутпут из которого формируется успешный ответ от эндпоинта получения профиля пользователя.
<?php
namespace App\User\Profile;
use Symfobooster\Base\Output\Attributes\SuccessMarker;
use Symfobooster\Base\Output\OutputInterface;
#[SuccessMarker]
class Output
{
public int $id;
public string $name;
public string $email;
public function __construct(int $id, string $name, string $email)
{
$this->id = $id;
$this->name = $name;
$this->email = $email;
}
}
Обратите внимание на атрибут, которым помечен класс. Благодаря этому атрибуту будет возвращён HTTP Status 200.
Информация
Вместо атрибута вы можете использовать наследование от встроенных аутпутов.
Например здесь достаточно отнаследоваться от класса Symfobooster\Base\Output\Success
и вы получите такой же результат.
Посмотрим на сервис, который использует такой аутпут:
<?php
namespace App\User\Profile;
use Symfobooster\Base\Input\InputInterface;
use App\User\Prifile\Output;
use Symfobooster\Base\Service\ServiceInterface;
class ProfileService implements ServiceInterface
{
public function behave(InputInterface $input): mixed
{
$profile = $this->repository->getById($input->id);
return new Output(
$profile->getId,
$profile->getName(),
$profile->getEmail
);
}
}
Таким образом тело ответа будет например таким:
{
"id": 108,
"name": "Buddha",
"email": "siddhartha.gautama@enlightenment.com"
}
Встроеные аутпуты
В некоторых случаях вам не нужно создавать отдельный класс для стандартного ответа. Мы уже подготовили несколько клссов для таких случаев.
Success
HTTP Status: 200
Created
HTTP Status: 201
Возвращайте аутпут Created тогда, когда создали какую-то сущность.
<?php
namespace App\Product\Create;
use Symfobooster\Base\Input\InputInterface;
use Symfobooster\Base\Output\Created;
use Symfobooster\Base\Output\OutputInterface;
use Symfobooster\Base\Service\ServiceInterface;
class CreateService implements ServiceInterface
{
public function behave(InputInterface $input): OutputInterface
{
// $this->repository->persist($entity);
return new Created();
}
}
Часто бывает недостаточно вернуть статус 201, а необходимо вернуть и идентификатор созданой записи. Для этого есть классы, которые хранят числовой или строковый идентификатор.
Класс CreatedInt хранит числовой:
use Symfobooster\Base\Output\CreatedInt;
class CreateService implements ServiceInterface
{
public function behave(InputInterface $input): OutputInterface
{
return new CreatedInt(108);
}
}
Через CreatedString можно передать uuid:
use Symfobooster\Base\Output\CreatedString;
class CreateService implements ServiceInterface
{
public function behave(InputInterface $input): OutputInterface
{
return new CreatedString('123e4567-e89b-12d3-a456-426655440000');
}
}