PHP code example of samushi / domion

1. Go to this page and download the library: Download samushi/domion 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/ */

    

samushi / domion example snippets


// In your Controller
return $this->success($data, 'Data retrieved successfully');

// Response:
{
    "success": true,
    "code": 200,
    "message": "Data retrieved successfully",
    "data": { ... }
}

return $this->error('Validation failed', 422);

// Response:
{
    "success": false,
    "code": 422,
    "message": "Validation failed"
}



namespace App\Domain\Orders\Actions;

use Samushi\Domion\Actions\ActionFactory;
use App\Domain\Orders\Dto\CreateOrderDto;
use App\Domain\Orders\Repository\OrderRepository;

class CreateOrderAction extends ActionFactory
{
    public function __construct(
        protected OrderRepository $orderRepository
    ) {}

    public function handle(CreateOrderDto $dto): Order
    {
        return $this->orderRepository->create($dto->toArray());
    }
}

// Static call (recommended)
$order = CreateOrderAction::run($dto);

// Or with error handling
$result = CreateOrderAction::runSafe($dto);
if ($result['success']) {
    // Handle success
}



namespace App\Domain\Orders\Dto;

use App\Support\DataObjects;

class CreateOrderDto extends DataObjects
{
    public function __construct(
        public readonly int $customerId,
        public readonly array $items,
        public readonly float $total,
    ) {}
}

// In Controller
$dto = CreateOrderDto::fromRequest($request);

// The base DataObjects class automatically maps validated() data to constructor properties



namespace App\Domain\Orders\Repository;

use App\Domain\Orders\Models\Order;
use App\Support\Repositories;
use Illuminate\Database\Eloquent\Model;

class OrderRepository extends Repositories
{
    protected function getModel(): Model
    {
        return new Order();
    }

    // Optional: Define domain-specific filters
    protected function getFilters(): array
    {
        return [
            new \App\Domain\Orders\Filters\StatusFilter(),
            new \App\Domain\Orders\Filters\CustomerFilter(),
        ];
    }
}

$repository->all();                    // Get all records
$repository->paginate(15);             // Paginate results
$repository->find($id);                // Find by ID
$repository->findOrFail($id);          // Find or throw exception
$repository->findBy('email', $email);  // Find by column
$repository->findWhere(['status' => 'active']); // Find with conditions
$repository->create($data);            // Create record
$repository->update($data, $id);       // Update record
$repository->delete($id);              // Delete record
$repository->exists($id);              // Check existence
$repository->count();                  // Count records



namespace App\Domain\Orders\Filters;

use Samushi\QueryFilter\Filter;

class StatusFilter extends Filter
{
    public function applyFilter($builder)
    {
        return $builder->where('status', $this->getValue());
    }
}

// Request: GET /orders?status=pending&search=john

$orders = $orderRepository->paginate(15);
// Automatically filtered by status and searched!



namespace App\Domain\Orders\Controllers;

use App\Support\Controllers\ApiControllers as Controller;

class OrderController extends Controller
{
    public function index(OrderRepository $repository)
    {
        return $this->success($repository->paginate());
    }

    public function store(CreateOrderRequest $request)
    {
        $dto = CreateOrderDto::fromRequest($request);
        $order = CreateOrderAction::run($dto);
        
        return $this->success($order, 'Order created', 201);
    }
}



namespace App\Domain\Orders\Controllers;

use App\Support\Controllers\InertiaControllers as Controller;

class OrderController extends Controller
{
    public function index(OrderRepository $repository)
    {
        return $this->render('Orders/Index', [
            'orders' => $repository->paginate()
        ]);
    }
}

// Login endpoint returns token
{
    "success": true,
    "data": {
        "token": "1|abc123...",
        "user": { ... }
    }
}

// Use token in subsequent requests
Authorization: Bearer 1|abc123...
bash
php artisan domion:setup
bash
php artisan migrate
php artisan serve
bash
npm install
npm run dev
php artisan migrate
php artisan serve
bash
php artisan domion:make:action CreateOrder