PHP code example of odysee / iliad

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

    

odysee / iliad example snippets


namespace Iliad\Repositories;

abstract class BaseRepository
{
    // Common repository methods
    public function find(object $request): object;
    public function getAll(object $request): object;
    // ...
}

namespace Iliad\Repositories;

abstract class _BaseRepository
{
    use Transaction, QueryBuilder;

    protected Model $model;
    protected string $dataClass;
    
    // Core methods
    public function getAll(): DataCollection;
    public function find(int $id): Data;
    // ...
}

namespace App\Repositories;

use App\Dto\UserData;
use App\Interfaces\UserRepositoryInterface;
use App\Models\User;
use Iliad\Transactions\Transaction;
use Iliad\Repositories\_BaseRepository;
use Iliad\Repositories\Concerns\QueryBuilder;
use Iliad\Transactions\TransactionManager;

class UserRepository extends _BaseRepository implements UserRepositoryInterface
{
    use Transaction,
        QueryBuilder;

    protected string $dataClass = UserData::class;

    public function __construct(
        User $userModel,
        TransactionManager $transactionManager
    )
    {
        $this->transactionManager = $transactionManager;
        parent::__construct();
        $this->model = $userModel;
    }

    public function store(UserData $userData): UserData
    {
        $this->model->create($userData);

        $this->transactionManager->commit();

        return $results['model']->refresh()->getData();
    }

    public function update(UserData $userData): UserData
    {
        $user = $this->model->findOrFail($userData->id);

        // Update logic here

        $this->transactionManager->commit();

        return $user->refresh()->getData();
    }

    public function destroy(int $id): void
    {
        // Delete logic here
    }
}

namespace Iliad\Transactions;

trait Transaction
{
    public ?TransactionManager $transactionManager = null;

    private function getTransactionManager(): TransactionManager;
    private function startTransactions(): void;
    private function commitTransactions(): void;
    private function flush(): void; // Deprecated, use commitTransactions() instead
    // ...
}

namespace Iliad\Transactions;

class TransactionManager
{
    public function beginTransaction(): void;
    public function commit(): void;
    public function rollback(): void;
    public function transaction(callable $callback): mixed;
    // ...
}

namespace Iliad\Repositories\Concerns;

trait QueryBuilder
{
    public function collectionResponse(Builder|Model $query): DataCollection;
    public function createCollection(Builder|Model $query): DataCollection;
    public function createDataCollection(Builder|Model $query): DataCollection;
    private function parseQueryDataToQuery(Builder|Model $query, QueryStringData $queryData): Builder;
    public function sort(Builder $query, Request $request): Builder;
    public function noSort(Builder $query): Builder;
    // ...
}

namespace Iliad\DataTransferObjects;

class Dto
{
    use StaticCreateFrom, StaticCreateDataCollection, ToArray;
}

namespace Iliad\Http\Controllers;

abstract class BaseController extends Controller
{
    protected $model;
    protected $resource;
    protected array $rules = [];

    public function index(Request $request);
    public function show(Request $request);
    public function store(Request $request): object;
    public function update(Request $request): object;
    public function destroy(int $id): void;
    // ...
}

namespace Iliad\Http\Controllers;

abstract class _BaseController extends Controller
{
    // Base controller functionality
}

namespace Iliad\Http\Controllers;

abstract class Controller
{
    protected array $middleware = [];

    public function middleware($middleware, array $options = []): ControllerMiddlewareOptions;
    public function getMiddleware();
    public function callAction($method, $parameters);
    // ...
}


namespace App\Http\Controllers;

use App\Dto\UserData;
use App\Repositories\UserRepository;
use Exception;
use Iliad\Http\Controllers\_BaseController;
use Iliad\RouteAttributes\Attributes\Prefix;
use Iliad\RouteAttributes\Attributes\Resource;
use Spatie\LaravelData\DataCollection;
use Spatie\LaravelData\Exceptions\InvalidDataClass;

#[Prefix('api/v3')]
#[Resource(
    resource: 'users',
    apiResource: true,
    except: ['destroy'],
    names: 'api.v3.users',
    parameters: ['users' => 'id'],
    shallow: true,
)]
class UserController extends _BaseController
{
    public function __construct(
        protected UserRepository $userRepository,
    ) {}

    /**
     * @return DataCollection<UserData>
     * @throws InvalidDataClass|\ReflectionException
     */
    public function index(): DataCollection
    {
        return $this->userRepository->getAll();
    }

    /**
     * @param int $id
     * @return UserData
     * @throws InvalidDataClass|\ReflectionException
     */
    public function show(int $id): UserData
    {
        return $this->userRepository->find($id);
    }

    /**
     * @param UserData $userData
     * @return UserData
     * @throws Exception
     */
    public function store(UserData $userData): UserData
    {
        return $this->userRepository->store($userData);
    }

    /**
     * @param UserData $userData
     * @return UserData
     */
    public function update(UserData $userData): UserData
    {
        return $this->userRepository->update($userData);
    }
}

namespace Iliad\ExceptionHandler;

class HandlerDecorator implements ExceptionHandler
{
    public function report(Throwable $e);
    public function render($request, Throwable $e);
    public function renderForConsole($output, Throwable $e);
    public function reporter(callable $reporter): int;
    public function renderer(callable $renderer): int;
    public function consoleRenderer(callable $renderer);
    // ...
}

namespace Iliad\Concerns;

trait Validator
{
    private function validator(string $function, Request $request): void;
    public function enforce($rules, int $status = 412): void;
    // ...
}

namespace Iliad\Concerns;

trait ResolveId
{
    public static function resolveId(): mixed;
}

namespace Iliad\Concerns;

trait WithData
{
    public function getData();
}

namespace Iliad\Concerns;

trait Editable
{
    public function formatMessage(): void;
    private function replace($fields, $variable): void;
    // ...
}

GET /api/users/1?with=posts,comments

GET /api/users/1?with=posts.comments

GET /api/users?scopes=active,premium

GET /api/users?paginate=true&per_page=10

GET /api/users?groupBy=role

GET /api/users/1?with=posts&except=posts.body