1. Go to this page and download the library: Download mrhdolek/slim4-boirlerplate 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/ */
mrhdolek / slim4-boirlerplate example snippets
namespace App\Application\Actions\User;
class GetAllUsersAction extends UserAction
{
public function __construct(
private readonly UserService $userService,
protected LoggerInterface $logger,
) {
parent::__construct($logger);
}
protected function action(): Response
{
$user = $this->userService->getAllUsers();
return $this->respondWithJson(new UsersResponseDto($user));
}
}
return function (App $app) {
$group->get("/users", GetAllUsersAction::class)
->setName("getAllUsers");
};
#[AsCommand(name: 'app:user:create')]
class CreateUserConsoleCommand extends Command
{
protected function execute(InputInterface $input, OutputInterface $output): int
{
// ...
return Command::SUCCESS;
}
}
$scheduler = new GO\Scheduler();
$scheduler->php('/path/to/command app:user:create')->daily();
$scheduler->run();
class UserWasCreated extends DomainEvent
{
}
namespace App\Domain\Entity\User\DomainEvents;
#[AsEventHandler]
class UserWasCreatedEventHandler implements EventHandler
{
public function __construct(
) {
}
public function handle(DomainEvent $event): void
{
assert($event instanceof UserWasCreated);
// Do stuff.
}
}
class UserWasCreated extends DomainEvent
{
public function __construct(
private UserId $userId,
) {
}
public function getUserId(): UserId
{
return $this->userId;
}
}
#[AsAmqpQueue(name: "user-command-queue", numberOfWorkers: 1)]
class UserEventQueue extends EventQueue
{
}
final readonly class UserEventsService
{
public function __construct(
private UserEventQueue $userEventQueue,
) {}
public function userWasCreated(User $user): void
{
$this->userEventQueue->queue(new UserWasCreated($user));
}
}
use App\Domain\ValueObject\UserType;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Types\StringType;
class UserTypeType extends StringType
{
const TYPE_NAME = 'UserType';
public function convertToPHPValue($value, AbstractPlatform $platform): ?UserType
{
return null !== $value ? UserType::fromString($value) : null;
}
public function getName()
{
return self::TYPE_NAME;
}
}
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\DriverManager;
use Doctrine\DBAL\Types\Type;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Tools\Setup;
return [
...
EntityManager::class => function (Settings $settings): EntityManager {
$config = Setup::createXMLMetadataConfiguration(
$settings->get("doctrine.metadata_dirs"),
$settings->get("doctrine.dev_mode"),
);
if (!Type::hasType('UserType')) {
Type::addType('UserType', UserTypeType::class);
}
return EntityManager::create($settings->get("doctrine.connection"), $config);
},
...
];
bash
* * * * * ./bin/console.php schedule
bash
> docker-compose run --rm php bin/console.php app:amqp:consume user-command-queue
bash
> docker-compose run --rm php vendor/bin/doctrine-migrations diff
> docker-compose run --rm php vendor/bin/doctrine-migrations migrate
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.