PHP code example of syeedalireza / architecture-patterns-lab

1. Go to this page and download the library: Download syeedalireza/architecture-patterns-lab 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/ */

    

syeedalireza / architecture-patterns-lab example snippets


use ArchitecturePatternsLab\CleanArchitecture\Application\UseCases\CreateOrder;
use ArchitecturePatternsLab\CleanArchitecture\Domain\Entities\Order;
use ArchitecturePatternsLab\CleanArchitecture\Infrastructure\Repositories\InMemoryOrderRepository;

// Infrastructure (outer layer)
$repository = new InMemoryOrderRepository();

// Application layer (use case)
$createOrder = new CreateOrder($repository);

// Execute use case
$order = $createOrder->execute([
    'customer_id' => '123',
    'items' => [
        ['product_id' => 'p1', 'quantity' => 2, 'price' => 29.99]
    ]
]);

use ArchitecturePatternsLab\HexagonalArchitecture\Domain\Order;
use ArchitecturePatternsLab\HexagonalArchitecture\Ports\OrderRepository;
use ArchitecturePatternsLab\HexagonalArchitecture\Adapters\PostgresOrderRepository;

// Primary Port (interface)
interface CreateOrderPort
{
    public function create(array $data): Order;
}

// Domain Service implements Port
class OrderService implements CreateOrderPort
{
    public function __construct(private OrderRepository $repository) {}

    public function create(array $data): Order
    {
        $order = new Order($data);
        $this->repository->save($order);
        return $order;
    }
}

// Secondary Adapter (infrastructure)
$repository = new PostgresOrderRepository($pdo);
$orderService = new OrderService($repository);

// Primary Adapter (HTTP Controller)
$order = $orderService->create($_POST);

use ArchitecturePatternsLab\OnionArchitecture\Core\Order;
use ArchitecturePatternsLab\OnionArchitecture\Services\OrderService;
use ArchitecturePatternsLab\OnionArchitecture\Infrastructure\OrderRepositoryImpl;

// Core domain
$order = Order::create('customer-123');

// Service layer
$orderService = new OrderService(
    new OrderRepositoryImpl()
);

// Execute business workflow
$result = $orderService->placeOrder($order);