1. Go to this page and download the library: Download lshamanl/symfony-ui-bundle library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
lshamanl / symfony-ui-bundle example snippets
declare(strict_types=1);
namespace Path\To\Class;
use Bundle\UIBundle\Core\Contract\Command\InputContractInterface;
use Symfony\Component\Validator\Constraints as Assert;
class Contract implements InputContractInterface
{
#[Assert\Uuid]
#[Assert\NotBlank]
public string $userId;
#[Assert\Email]
#[Assert\NotBlank]
public string $email;
}
declare(strict_types=1);
namespace Path\To\Class;
use App\Path\To\Entity\User\ValueObject\Id as UserId;
use Bundle\UIBundle\Core\Contract\Command\CommandInterface;
final class Command implements CommandInterface
{
public string $email;
public UserId $userId;
}
declare(strict_types=1);
namespace Path\To\Class;
use App\Model\Flusher;
use App\Path\To\Entity\Client;
use App\Path\To\Entity\ClientRepository;
use Bundle\UIBundle\Core\Contract\Command\CommandInterface;
use Bundle\UIBundle\Core\Contract\Command\HandlerInterface;
class Handler implements HandlerInterface
{
private ClientRepository $clientRepository;
private Flusher $flusher;
public function __construct(ClientRepository $clientRepository, Flusher $flusher)
{
$this->clientRepository = $clientRepository;
$this->flusher = $flusher;
}
/**
* @param Command $command
*/
public function handle(CommandInterface $command): void
{
$client = Client::create(
$command->userId
);
$this->clientRepository->add($client);
$client->addEmail($command->email);
$this->flusher->flush($client);
}
}
declare(strict_types=1);
namespace Path\To\Class;
use App\Model\Profile\Clients\Entity\Client\Client;
use App\Model\Profile\Clients\Entity\Email\Email;
use Bundle\UIBundle\Core\Contract\Command\LocalizationOutputContractInterface;
use DateTimeInterface;
use Symfony\Component\Serializer\Annotation\Ignore;
class CommonOutputContract implements LocalizationOutputContractInterface
{
/** @Ignore() */
public Client $client;
/** @Ignore() */
private string $locale;
public function __construct(Client $client, string $locale)
{
$this->client = $client;
$this->locale = $locale;
}
public function getId(): string
{
return $this->client->getId()->getValue();
}
/**
* @return string[]
*/
public function getEmails(): array
{
return array_map(function (Email $email) {
return $email->getEmail();
}, $this->client->getEmails());
}
public function getMiddleName(): ?string
{
return $this->client->getName()?->getTranslation($this->locale)?->getMiddle();
}
public function getLastName(): ?string
{
return $this->client->getName()?->getTranslation($this->locale)?->getLast();
}
public function getFirstName(): ?string
{
return $this->client->getName()?->getTranslation($this->locale)?->getFirst();
}
public function getGender(): ?string
{
return $this->client->getGender()?->toScalar();
}
public function getCreatedAt(): string
{
return $this->client->getCreatedAt()->format(DateTimeInterface::ATOM);
}
public function getLang(): string
{
return $this->locale;
}
}
use App\Path\To\Entity;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Nelmio\ApiDocBundle\Annotation\Model;
use OpenApi\Annotations as OA;
use Bundle\UIBundle\Core as UI;
class Controller {
/**
* @Route("/{id}.{_format}", methods={"GET"}, name=".read", defaults={"_format"="json"})
* @OA\Response(
* response=200,
* description="Read Entity",
* @OA\JsonContent(
* allOf={
* @OA\Schema(ref=@Model(type=UI\Contract\ApiFormatter::class)),
* @OA\Schema(type="object",
* @OA\Property(
* property="data",
* type="object",
* @OA\Property(
* property="entity",
* ref=@Model(type=CommonOutputContract::class)
* )
* ),
* @OA\Property(
* property="status",
* example="200"
* )
* )
* }
* )
* )
*/
public function read(
string $id,
UI\CQRS\Query\GetOne\Processor $processor,
UI\Dto\OutputFormat $outputFormat,
UI\Dto\Locale $locale
): Response {
$context = new UI\CQRS\Query\GetOne\Context(
outputFormat: $outputFormat->getFormat(),
entityId: $id,
targetEntityClass: Entity::class,
outputDtoClass: CommonOutputContract::class,
locale: $locale
);
$processor->process($context);
return $processor->makeResponse();
}
}
use App\Path\To\Entity;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Nelmio\ApiDocBundle\Annotation\Model;
use OpenApi\Annotations as OA;
use Bundle\UIBundle\Core as UI;
class Controller {
/**
* @Route(".{_format}", methods={"GET"}, name=".search", defaults={"_format"="json"})
* @OA\Get(
* @OA\Parameter(
* name="searchParams",
* in="query",
* * property="data",
* type="object",
* @OA\Property(
* property="entities",
* ref=@Model(type=CommonOutputContract::class)
* )
* ),
* @OA\Property(
* property="status",
* example="200"
* )
* )
* }
* )
* )
*/
public function search(
UI\CQRS\Query\Search\Processor $processor,
UI\Service\Filter\SearchQuery $searchQuery,
UI\Dto\Locale $locale,
UI\Dto\OutputFormat $outputFormat
): Response {
$context = new UI\CQRS\Query\Search\Context(
targetEntityClass: Entity::class,
outputFormat: $outputFormat->getFormat(),
outputDtoClass: UseCase\CommonOutputContract::class,
filterBlackList: ['id'],
locale: $locale,
pagination: $searchQuery->getPagination(),
filters: $searchQuery->getFilters(),
sorts: $searchQuery->getSorts()
);
$processor->process($context);
return $processor->makeResponse();
}
}
use App\Path\To\UseCase as UseCase;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Nelmio\ApiDocBundle\Annotation\Model;
use OpenApi\Annotations as OA;
use Bundle\UIBundle\Core as UI;
class Controller {
/**
* @Route(".{_format}", methods={"POST"}, name=".create", defaults={"_format"="json"})
* @OA\Post(
* @OA\RequestBody(
* @OA\MediaType(
* mediaType="application/json",
* @OA\Schema(
* ref=@Model(type=UseCase\Create\Contract::class)
* )
* )
* )
* )
* @OA\Response(
* response=200,
* description="Create User",
* @OA\JsonContent(
* allOf={
* @OA\Schema(ref=@Model(type=UI\Contract\ApiFormatter::class)),
* @OA\Schema(type="object",
* @OA\Property(
* property="data",
* type="object",
* @OA\Property(
* property="entities",
* ref=@Model(type=UseCase\CommonOutputContract::class)
* )
* ),
* @OA\Property(
* property="status",
* example="200"
* )
* )
* }
* )
* )
*/
public function create(
UI\CQRS\Command\Sync\Processor $processor,
UI\Dto\OutputFormat $outputFormat,
UseCase\Create\Contract $contract,
UseCase\Create\Handler $handler
): Response {
$command = new UseCase\Create\Command();
$command->mapContract($contract);
$context = new UI\CQRS\Command\Sync\Context(
handler: $handler,
command: $command,
outputFormat: $outputFormat->getFormat(),
);
$processor->process($context);
return $processor->makeResponse();
}
}
use App\Path\To\Entity;
use App\Path\To\UseCase as UseCase;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Nelmio\ApiDocBundle\Annotation\Model;
use OpenApi\Annotations as OA;
use Bundle\UIBundle\Core as UI;
class Controller {
/**
* @Route(".{_format}", methods={"POST"}, name=".create", defaults={"_format"="json"})
* @OA\Post(
* @OA\RequestBody(
* @OA\MediaType(
* mediaType="application/json",
* @OA\Schema(
* ref=@Model(type=UseCase\Create\Contract::class)
* )
* )
* )
* )
* @OA\Response(
* response=200,
* description="Create Message",
* @OA\JsonContent(
* allOf={
* @OA\Schema(ref=@Model(type=UI\Contract\ApiFormatter::class)),
* @OA\Schema(type="object",
* @OA\Property(
* property="ok",
* example=true
* )
* @OA\Property(
* property="status",
* example="200"
* )
* )
* }
* )
* )
*/
#[Route(".{_format}", name: '.create', defaults: ['_format' => 'json'], methods: ["POST"])]
public function create(
UI\CQRS\Command\Async\Processor $processor,
UI\Dto\OutputFormat $outputFormat,
UseCase\Create\Contract $contract
): Response {
$command = new UseCase\Create\Command();
$command->mapContract($contract);
$context = new UI\CQRS\Command\Async\Context(
command: $command,
outputFormat: $outputFormat->getFormat(),
);
$processor->process($context);
return $processor->makeResponse();
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.