<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
grzegorz-jamroz / sf-doctrine-api-bundle example snippets
// src/Entity/Product.php
namespace App\Entity;
use App\Repository\ProductRepository;
use Doctrine\ORM\Mapping as ORM;
use Ifrost\DoctrineApiBundle\Entity\EntityInterface;
use PlainDataTransformer\Transform;
use Ramsey\Uuid\Doctrine\UuidV7Generator;
use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\UuidInterface;
#[ORM\Entity(repositoryClass: ProductRepository::class)]
class Product implements EntityInterface
{
#[ORM\Id]
#[ORM\Column(type: "uuid_binary", unique: true)]
#[ORM\GeneratedValue(strategy: "CUSTOM")]
#[ORM\CustomIdGenerator(class: UuidV7Generator::class)]
private UuidInterface $uuid;
#[ORM\Column(length: 255)]
private string $name;
public function __construct(
UuidInterface $uuid,
string $name,
) {
$this->uuid = $uuid;
$this->name = $name;
}
public function getUuid(): UuidInterface
{
return $this->uuid;
}
public function getName(): string
{
return $this->name;
}
public static function getTableName(): string
{
return 'product';
}
/**
* @return array<int, string>
*/
public static function getFields(): array
{
return array_keys(self::createFromArray([])->getWritableFormat());
}
public function getWritableFormat(): array
{
return [
'uuid' => $this->uuid->getBytes(),
'name' => $this->name,
];
}
public function jsonSerialize(): array
{
return [
'uuid' => (string) $this->uuid,
'name' => $this->name,
];
}
public static function createFromArray(array $data): static|self
{
return new self(
$data['uuid'] ?? Uuid::uuid7(),
Transform::toString($data['name'] ?? ''),
);
}
public static function createFromRequest(array $data): static|self
{
return new self(
$data['uuid'] === null ? Uuid::uuid7() : Uuid::fromString($data['uuid']),
Transform::toString($data['name'] ?? ''),
);
}
}
declare(strict_types=1);
namespace App\Controller;
use App\Entity\Product;
use Ifrost\ApiFoundation\Attribute\Api;
use Ifrost\DoctrineApiBundle\Controller\DoctrineApiController;
#[Api(entity: Product::class, path: 'products')]
class ProductController extends DoctrineApiController
{
}
declare(strict_types=1);
namespace App\Controller;
use App\Entity\Product;
use Ifrost\ApiFoundation\Attribute\Api;
use Ifrost\DoctrineApiBundle\Controller\DoctrineApiController;
use Symfony\Component\Routing\Annotation\Route;
#[Api(
entity: Product::class,
path: 'products'
)]
class ProductController extends DoctrineApiController
{
#[Route('/create_products', name: 'products_create', methods: ['POST'])]
public function create(): Response
{
return $this->getApi()->create();
}
}
declare(strict_types=1);
namespace App\Controller;
use App\Entity\Product;
use Ifrost\ApiFoundation\Attribute\Api;
use Ifrost\DoctrineApiBundle\Controller\DoctrineApiController;
#[Api(
entity: Product::class,
path: 'products',
excludedActions: [
Action::CREATE,
Action::UPDATE,
Action::MODIFY,
'delete',
'not_valid_actions_will_be_omitted'
])]
)]
class ProductController extends DoctrineApiController
{
}
php bin/console debug:router
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.