Skip to content

Instantly share code, notes, and snippets.

@webdevilopers
webdevilopers / AgencyPublisher.php
Created Jun 6, 2020
Symfony Messenger - Subscribing multiple Handlers to Messages
View AgencyPublisher.php
<?php
namespace Acme\TemporaryWork\Infrastructure\ProcessManager;
use OldSound\RabbitMqBundle\RabbitMq\ProducerInterface;
use Prooph\EventSourcing\AggregateChanged;
use Acme\TemporaryWork\Domain\Model\Agency\Event\AgencyHired;
use Acme\TemporaryWork\Domain\Model\Agency\Event\AgencyModified;
use Acme\PersonnelManagement\Infrastructure\RabbitMq\Producer;
use Symfony\Component\Messenger\Handler\MessageSubscriberInterface;
@webdevilopers
webdevilopers / EventPublisher.php
Created Jun 4, 2020
Replacing Prooph Service Event Bus with Symfony Messenger using custom Event Publisher
View EventPublisher.php
<?php
namespace Acme\Context\Infrastructure\Prooph;
use Prooph\Common\Event\ActionEvent;
use Prooph\EventStore\ActionEventEmitterEventStore;
use Prooph\EventStore\EventStore;
use Prooph\EventStore\Plugin\AbstractPlugin;
use Prooph\EventStore\TransactionalActionEventEmitterEventStore;
use Symfony\Component\Messenger\MessageBusInterface;
@webdevilopers
webdevilopers / AbstractControllerTest.php
Last active May 8, 2020
Functional Testing Symfony Controllers with JWT and Symfony Messenger
View AbstractControllerTest.php
<?php
namespace Tests\Acme\PersonnelManagement\Infrastructure\Symfony\AcmePersonnelManagementBundle\Controller;
use Lexik\Bundle\JWTAuthenticationBundle\Encoder\JWTEncoderInterface;
use Symfony\Bundle\FrameworkBundle\KernelBrowser;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
abstract class AbstractControllerTest extends WebTestCase
{
@webdevilopers
webdevilopers / ErrorResponseBuilder.php
Last active Jul 30, 2021
API friendly error handling with Symfony Messenger and Event Listener
View ErrorResponseBuilder.php
<?php
namespace Acme\Common\Infrastructure\Symfony\Messenger;
use Prooph\EventStore\Exception\ConcurrencyException;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\Exception\HandlerFailedException;
use Symfony\Component\Messenger\Exception\RuntimeException;
use Symfony\Component\Messenger\Exception\ValidationFailedException;
@webdevilopers
webdevilopers / Deployment.php
Last active Mar 10, 2020
Domain-Driven Design - Creating aggregates and enforcing invariants spanning multiple aggregates
View Deployment.php
<?php
final class Deployment1
{
public static function with(DeploymentId $anId, EmploymentContractId $anEmploymentContractId,
DeploymentPeriod $aPeriod): Deployment
{
// No period range validation, final period was already validated and passed
}
}
@webdevilopers
webdevilopers / DefaultGridFSRepository.php
Last active Jan 18, 2020
Uploading Files with Metadata using MongoDB GridFS in a PHP Domain-Driven Design application
View DefaultGridFSRepository.php
<?php
class DefaultGridFSRepository extends DocumentRepository implements GridFSRepository
{
public function uploadFromStream(string $filename, $source, ?UploadOptions $uploadOptions = null)
{
$options = $this->prepareOptions($uploadOptions);
$databaseIdentifier = $this->getDocumentBucket()->uploadFromStream($filename, $source, $options);
$documentIdentifier = $this->class->getPHPIdentifierValue($databaseIdentifier);
@webdevilopers
webdevilopers / functions.php
Created Jan 11, 2020
How to convert PHP MongoDB BSON Binary to (L)UUID or ObjectId
View functions.php
<?php
use MongoDB\BSON\Binary;
use MongoDB\BSON\ObjectId;
function mongoBinaryToUuid(Binary $bin): string
{
$hex = bin2hex($bin->getData());
return substr($hex, 0, 32);
@webdevilopers
webdevilopers / MaterialQuantityDto.php
Created Nov 29, 2019
Dynamic form validation groups with callback in Symfony 2.8
View MaterialQuantityDto.php
<?php
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
class MaterialQuantityDto
{
/**
* @var string
* @Assert\NotNull(groups={"available_material"})
@webdevilopers
webdevilopers / JsonObject.php
Created Apr 15, 2019
UPDATE and INSERT statements with Doctrine DBAL and MySQL JSON type
View JsonObject.php
<?php
class JsonObject
{
/** @var string $result */
private $result;
private function __construct(string $result)
{
$this->result = $result;
@webdevilopers
webdevilopers / DoctrineGutterColorRepository.php
Last active Mar 14, 2022
Using Value Objects as Custom Doctrine DBAL Type as Identifier in Symfony
View DoctrineGutterColorRepository.php
<?php
namespace Sps\DormerCalculation\Infrastructure\Persistence\Doctrine;
use Doctrine\ORM\EntityRepository;
/**
* Class DoctrineGutterColorRepository
* @package Sps\DormerCalculation\Infrastructure\Persistence\Doctrine
*/