1. Go to this page and download the library: Download ccmbenchmark/ting_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/ */
ccmbenchmark / ting_bundle example snippets
new CCMBenchmark\TingBundle\TingBundle(),
namespace App\Entity;
use CCMBenchmark\Ting\Entity\NotifyProperty;
use CCMBenchmark\Ting\Entity\NotifyPropertyInterface;
class City implements NotifyPropertyInterface {
use NotifyProperty;
public string $name;
public function setName(string $name): void
{
$this->propertyChanged('name', $this->name ?? null, $name);
$this->name = $name;
}
}
namespace App\Entity;
use CCMBenchmark\Ting\Entity\NotifyProperty;
use CCMBenchmark\Ting\Entity\NotifyPropertyInterface;
class City implements NotifyPropertyInterface {
use NotifyProperty;
public string $name {
set(string $name) {
$this->propertyChanged('name', $this->name ?? null, $name);
$this->name = $name;
}
};
}
// src/Entity/City.php
namespace App\Entity;
namespace tests\fixtures;
use App\Repository\CityRepository;
use Brick\Geo\Point;
use CCMBenchmark\Ting\Entity\NotifyProperty;
use CCMBenchmark\Ting\Entity\NotifyPropertyInterface;
use CCMBenchmark\TingBundle\Schema;
use Symfony\Component\Uid\Uuid;
use Symfony\Component\Uid\UuidV4;
#[Schema\Table('city_table', 'connectionName', '%env(DATABASE_NAME)%', CityRepository::class)]
class City implements NotifyPropertyInterface
{
use NotifyProperty;
#[Schema\Column(autoIncrement: true, primary: true)]
public int $id {
set(int $id) {
$this->propertyChanged('id', $this->id ?? null, $id);
$this->id = $id;
}
};
#[Schema\Column(column: 'field')]
public string $fieldWithSpecifiedColumnName {
set (string $fieldWithSpecifiedColumnName) {
$this->propertyChanged('fieldWithSpecifiedColumnName', $this->fieldWithSpecifiedColumnName ?? null, $fieldWithSpecifiedColumnName);
$this->fieldWithSpecifiedColumnName = $fieldWithSpecifiedColumnName;
}
};
}
// src/Repository/CityRepository.php
namespace App\Repository;
class CityRepository extends CCMBenchmark\Ting\Repository\Repository {
}
namespace App\Entity;
use App\Repository\UserRepository;
use CCMBenchmark\Ting\Entity\NotifyProperty;
use CCMBenchmark\Ting\Entity\NotifyPropertyInterface;
use CCMBenchmark\TingBundle\Schema\Column;
use CCMBenchmark\TingBundle\Schema\Table;
use CCMBenchmark\TingBundle\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Serializer\Attribute\Groups;
use Symfony\Component\Validator\Constraints as Assert;
#[Table(name: 'users', connection: 'main', database: '%env(DATABASE_DB_NAME)%', repository: UserRepository::class)]
#[UniqueEntity(options:['repository' => UserRepository::class, 'fields' => ['email']], groups: ['create'])]
class User implements UserInterface, NotifyPropertyInterface {
#[Column(autoIncrement: true, primary: true)]
public int $id { set(int $id) {
$this->propertyChanged('id', $this->id ?? null, $id);
$this->id = $id;
}}
#[Column]
#[Groups(['default', 'create', 'update', 'service_account'])]
#[Assert\NotBlank(groups: ["default", "create", "update"])]
#[Assert\Email(groups: ["default", "create", "update"])]
public string $email { set(string $email) {
$this->propertyChanged('email', $this->email ?? null, $email);
$this->email = $email;
} }
public function getRoles(): array
{
return ['ROLE_USER'];
}
public function eraseCredentials(): void
{
}
public function getUserIdentifier(): string
{
return $this->email;
}
public function __serialize(): array
{
return [
'id' => $this->id,
'email' => $this->email,
];
}
}
namespace App\Controller;
use App\Entity\User;
use App\Repository\UserRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Validator\Validator\ValidatorInterface;
#[Route('/users', methods:['POST'], format: 'json')]
class createUserController extends AbstractController {
public function __construct (private readonly ValidatorInterface $validator, private readonly UserRepository $userRepository) { }
public function __invoke(
#[MapRequestPayload(serializationContext: ['groups' => ['create']])] User $user
) :JsonResponse {
$violations = $this->validator->validate($user, groups: ['create']);
if ($violations->count() > 0) {
return new JsonResponse(['message' => 'Errors...'], 422);
}
$this->userRepository->save($user);
return new JsonResponse(['message' => 'User registered'], 201);
}
}
namespace App\Controller;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
class UserController {
#[Route('/api/users/{userId:myUser}', name: 'get_user', methods: ['GET'], format: 'json' )]
#[IsGranted('ROLE_USER')]
public function getUser(User $user): JsonResponse
{
return new JsonResponse($this->serializer->serialize($user, 'json', ['groups' => 'default']), json: true);
}
}
namespace App\Controller;
use CCMBenchmark\TingBundle\Attribute\MapEntity;
use Symfony\Component\Security\Http\Attribute\IsGranted;
class UserController {
#[Route('/api/users/{firstname}/{lastname}', name: 'get_user', methods: ['GET'], format: 'json' )]
#[IsGranted('ROLE_USER')]
public function getUser(#[MapEntity(expr: 'repository.getOneBy({"firstname": firstname, "lastname": lastname}')] User $user): JsonResponse
{
return new JsonResponse($this->serializer->serialize($user, 'json', ['groups' => 'default']), json: true);
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.