Skip to content

Instantly share code, notes, and snippets.

webdevilopers / AbstractControllerTest.php
Last active May 8, 2020
Functional Testing Symfony Controllers with JWT and Symfony Messenger
View AbstractControllerTest.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 / ErrorResponseBuilder.php
Last active Jul 30, 2021
API friendly error handling with Symfony Messenger and Event Listener
View ErrorResponseBuilder.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 / Deployment.php
Last active Mar 10, 2020
Domain-Driven Design - Creating aggregates and enforcing invariants spanning multiple aggregates
View Deployment.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 / DefaultGridFSRepository.php
Last active Jan 18, 2020
Uploading Files with Metadata using MongoDB GridFS in a PHP Domain-Driven Design application
View DefaultGridFSRepository.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 / functions.php
Created Jan 11, 2020
How to convert PHP MongoDB BSON Binary to (L)UUID or ObjectId
View functions.php
use MongoDB\BSON\Binary;
use MongoDB\BSON\ObjectId;
function mongoBinaryToUuid(Binary $bin): string
$hex = bin2hex($bin->getData());
return substr($hex, 0, 32);
webdevilopers / MaterialQuantityDto.php
Created Nov 29, 2019
Dynamic form validation groups with callback in Symfony 2.8
View MaterialQuantityDto.php
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
class MaterialQuantityDto
* @var string
* @Assert\NotNull(groups={"available_material"})
webdevilopers / JsonObject.php
Created Apr 15, 2019
UPDATE and INSERT statements with Doctrine DBAL and MySQL JSON type
View JsonObject.php
class JsonObject
/** @var string $result */
private $result;
private function __construct(string $result)
$this->result = $result;
webdevilopers / DoctrineGutterColorRepository.php
Last active Mar 10, 2019
Using Value Objects as Custom Doctrine DBAL Type as Identifier in Symfony
View DoctrineGutterColorRepository.php
namespace Sps\DormerCalculation\Infrastructure\Persistence\Doctrine;
use Doctrine\ORM\EntityRepository;
* Class DoctrineGutterColorRepository
* @package Sps\DormerCalculation\Infrastructure\Persistence\Doctrine
webdevilopers / DormerType.php
Created Feb 25, 2019
Using Entity as Factory for Value Object
View DormerType.php
abstract class DormerType implements DormerTypeInterface
webdevilopers / OfferFactory_v1.php
Last active Feb 20, 2019
DDD Domain Service vs Domain Factory vs. Double Dispatch
View OfferFactory_v1.php
final class OfferFactory
/** @var ChargeRatesFactory $chargeRatesFactory */
private $chargeRatesFactory;
/** @var PricesCalculator $pricesCalculator */
private $pricesCalculator;