Worked extension examples
These developer-facing recipes are kept beside the package contract. Replace the example values with the site-specific records and data objects used by the calling workflow.
<?phpdeclare(strict_types=1);final class ExampleAccessRequestMethodImplementation implements \Capell\AccessGate\Contracts\AccessRequestMethod{ public function key(): string { throw new LogicException('Implement this package contract for the calling site.'); } public function label(): string { throw new LogicException('Implement this package contract for the calling site.'); } public function description(): ?string { throw new LogicException('Implement this package contract for the calling site.'); } public function isEnabled(\Capell\AccessGate\Models\Area $area): bool { throw new LogicException('Implement this package contract for the calling site.'); } public function isPrimary(\Capell\AccessGate\Models\Area $area): bool { throw new LogicException('Implement this package contract for the calling site.'); } public function url(\Capell\AccessGate\Models\Area $area, ?string $requestedUrl = null): string { throw new LogicException('Implement this package contract for the calling site.'); }}
app()->bind(\Capell\AccessGate\Contracts\AccessRequestMethod::class, ExampleAccessRequestMethodImplementation::class);<?phpdeclare(strict_types=1);final class ExampleAdminNotificationRecipientResolverImplementation implements \Capell\AccessGate\Contracts\AdminNotificationRecipientResolver{ /** * Resolve the recipients that should receive access gate admin notifications. * * @return Collection<int, mixed> */ public function resolve(): \Illuminate\Support\Collection { throw new LogicException('Implement this package contract for the calling site.'); }}
app()->bind(\Capell\AccessGate\Contracts\AdminNotificationRecipientResolver::class, ExampleAdminNotificationRecipientResolverImplementation::class);<?phpdeclare(strict_types=1);final class ExampleRegistrationFieldImplementation implements \Capell\AccessGate\Contracts\RegistrationField{ public function key(): string { throw new LogicException('Implement this package contract for the calling site.'); } public function label(): string { throw new LogicException('Implement this package contract for the calling site.'); } /** * @param array<string, mixed> $input */ public function validate(array $input): \Capell\AccessGate\Data\RegistrationFieldValue { throw new LogicException('Implement this package contract for the calling site.'); }}
app()->bind(\Capell\AccessGate\Contracts\RegistrationField::class, ExampleRegistrationFieldImplementation::class);<?phpdeclare(strict_types=1);$inputs = []; // Supply the arguments required by the action handle() method.resolve(\Capell\AccessGate\Actions\InstallAccessGatePackageAction::class)->handle(...$inputs);<?phpdeclare(strict_types=1);$inputs = []; // Supply the arguments required by the action handle() method.resolve(\Capell\AccessGate\Actions\CreatePaidAccessCheckoutForRegistrationAction::class)->handle(...$inputs);<?phpdeclare(strict_types=1);\Capell\AccessGate\Manifest\PaidAccessCheckoutCreationContribution::run();