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
ActionExtensionContractPayloadExtensionContractQueryExtensionContractRuntimeHookContract
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