Reference

Extensions

Extension contracts for the cases where the declarative path is not enough.

Flashboard exposes extension contracts for the 20 percent path.

Available contracts

  • ActionExtensionContract
  • PayloadExtensionContract
  • QueryExtensionContract
  • RuntimeHookContract

Registration points

Resources expose:

  • queryExtensions()
  • payloadExtensions()
  • actionExtensions()
  • runtimeHooks()

Examples

Query extension

<?php

use Illuminate\Database\Eloquent\Builder;
use Pepperfm\Flashboard\Contracts\Extensions\QueryExtensionContract;

final class TenantQueryExtension implements QueryExtensionContract
{
    public function extend(Builder $query): Builder
    {
        return $query->where('tenant_id', tenant('id'));
    }
}

Runtime hook

<?php

use Pepperfm\Flashboard\Contracts\Extensions\RuntimeHookContract;

final class AuditHook implements RuntimeHookContract
{
    public function handle(string $hook, array $context = []): void
    {
        logger()->warning('Flashboard runtime hook triggered', [
            'hook' => $hook,
            'context' => $context,
        ]);
    }
}

Guidance

  • prefer extensions over forks
  • keep extensions resource-scoped when possible
  • reserve payload extensions for shape changes that cannot be expressed declaratively