Laravel Extensions
Laravel extension packages enhance core framework features with RightCapital-specific functionality.
illuminate-database
Section titled “illuminate-database”Extended Eloquent ORM with submodels, IAM authentication, and enhanced validation.
Key Features
Section titled “Key Features”- Submodel casting for nested JSON objects
- AWS RDS IAM authentication connectors
- Custom query builder macros
- Model-level validation on save
Service Providers
Section titled “Service Providers”ArtisanServiceProvider- Custom SeedCommand for YAML seedersMySqlServiceProvider- MySQL/IAM auth configurationQueryBuilderServiceProvider- Query builder macrosEloquentCollectionServiceProvider- Collection macrosModelServiceProvider- Timezone configuration
Submodel Casting
Section titled “Submodel Casting”use RightCapital\Illuminate\Database\Submodel;
class HouseholdSettings extends Submodel { public bool $notifications_enabled = true; public string $timezone = 'America/New_York';
public function rules(): array { return [ 'timezone' => 'required|timezone', ]; }}
class Household extends Model { protected $casts = [ 'settings' => HouseholdSettings::class, ];}
// Usage$household->settings->notifications_enabled = false;$household->save(); // Validates and serializes to JSONIAM Authentication
Section titled “IAM Authentication”// Connectors for AWS RDS IAM authuse RightCapital\Illuminate\Database\Connectors\IamAuthMySqlConnector;use RightCapital\Illuminate\Database\Connectors\IamAuthPostgresConnector;
// Automatically generates temporary tokens$token = RdsIamAuthTokenGenerator::generate($host, $port, $user, $region);Model Traits
Section titled “Model Traits”ValidatesWhenSavingTrait- Auto-validates on saveRemovesGlobalScopes- Remove global scopes from queriesHasRelationships- Enhanced relationship handling
illuminate-encryption
Section titled “illuminate-encryption”Advanced encryption with ID encryption, static IV, and Base64URL encoding.
Key Features
Section titled “Key Features”- Optimized ID encryption (22-byte output)
- Static IV support for deterministic encryption
- Raw binary output mode
- Base64URL encoding
Service Provider
Section titled “Service Provider”EncryptionServiceProvider replaces Laravel’s default encrypter.
use RightCapital\Illuminate\Encryption\Crypt;
// Standard encryption$encrypted = Crypt::encrypt($data);$decrypted = Crypt::decrypt($encrypted);
// ID encryption (optimized for numeric IDs)$encryptedId = Crypt::encryptId(12345); // 22-byte output$id = Crypt::decryptId($encryptedId); // 12345
// Raw output (no Base64)$raw = Crypt::encryptString($data, static_iv: true, raw_output: true);Configuration
Section titled “Configuration”'cipher' => 'aes-256-cbc','key' => env('APP_KEY'),'id_encryption_iv' => env('APP_ID_ENCRYPTION_IV'),illuminate-filesystem
Section titled “illuminate-filesystem”Flysystem decorator chains for compression, encryption, and other adapters.
Key Features
Section titled “Key Features”- Decorator pattern for stacked adapters
- S3 Guzzle configuration for compression support
- Container-aware decorator instantiation
Configuration
Section titled “Configuration”'disks' => [ 's3' => [ 'driver' => 's3', // ... standard S3 config 'flysystem_decorators' => [ 'CompressAdapter' => [ 'rules' => [/* compression rules */], ], ], ],],Decorators are applied automatically based on configuration. The FilesystemManager processes the flysystem_decorators array and wraps the base adapter.
illuminate-http-problem-response
Section titled “illuminate-http-problem-response”RFC 7807 Problem Details for HTTP APIs.
Key Features
Section titled “Key Features”- Standardized error response format
- Sensitive field masking
- Content-Type:
application/problem+json
// Using response macroreturn response()->problem( detail: 'Missing required field: email', status: 400, extra: ['field' => 'email'], type: 'https://api.rightcapital.io/probs/validation-error', title: 'Validation Error');
// Response structure{ "type": "https://api.rightcapital.io/probs/validation-error", "title": "Validation Error", "status": 400, "detail": "Missing required field: email", "field": "email"}Security Features
Section titled “Security Features”- Masks sensitive keys (authorization, password, token, secret, etc.)
- UTF-8 encoding conversion
- Recursive array traversal for nested values
illuminate-routing
Section titled “illuminate-routing”Extended resource routing that disables PATCH method.
Key Features
Section titled “Key Features”- Removes PATCH route from resource registrations
- Only registers PUT for update operations
Effect
Section titled “Effect”// Route::resource('users', UserController::class);// Generates: GET, POST, PUT, DELETE (no PATCH)This is automatically applied via the ResourceRegistrarServiceProvider.
illuminate-validation
Section titled “illuminate-validation”Extended validation with null conditions, HTML validation, and precision checks.
Custom Rules
Section titled “Custom Rules”| Rule | Description |
|---|---|
null | Value must be null |
null_if | Null if condition matches |
null_unless | Null unless condition matches |
null_with | Null when certain fields present |
null_without | Null when fields absent |
true / false | Boolean true/false |
binary | Binary string value |
html | Valid HTML with allowed tags |
array_sum | Array of numbers summing to value |
max_precision | Decimal places limit |
real_email | Non-disposable email |
$validator = Validator::make($data, [ 'nullable_field' => 'null_if:other_field,yes', 'content' => 'html:p,br,strong,em', 'percentages' => 'array_sum:100', 'amount' => 'max_precision:2', 'email' => 'real_email',]);Enhanced Validator
Section titled “Enhanced Validator”// Custom size calculation for binary strings// Enhanced nullable check with null-conditional ruleslaravel-restful
Section titled “laravel-restful”RESTful controller traits for building resource APIs.
Controller Traits
Section titled “Controller Traits”| Trait | Methods |
|---|---|
ModelBased | Base trait for model-backed controllers |
Listable | index() with pagination |
Readable | show() for single resource |
Creatable | store() for creation |
Updatable | update() for modifications |
Deletable | destroy() for deletion |
BulkOperateable | Bulk create/update/delete |
Restorable | Soft delete restoration |
class UserController extends Controller { use ModelBased, Listable, Readable, Creatable, Updatable, Deletable;
protected const MODEL = User::class; protected const EAGER_LOAD_RELATIVES = [ 'profile' => [], 'roles' => ['permissions'], ];}JsonResource with Attributes
Section titled “JsonResource with Attributes”use RightCapital\LaravelRestful\JsonResource;
class UserResource extends JsonResource { #[Attribute('id')] #[Attribute('email')] #[ConditionalAttribute('phone', when: 'hasPhone')] #[Relation('profile')] public function toArray($request): array { return $this->resolveAttributes(); }}Pagination
Section titled “Pagination”The Listable trait supports:
- Chunk mode (offset pagination)
- Stream mode (cursor pagination)
- RFC Link headers for navigation
laravel-form-requests
Section titled “laravel-form-requests”Multi-source form request validation (JSON, form, query).
Request Types
Section titled “Request Types”| Class | Source | Use Case |
|---|---|---|
JsonRequest | JSON body | API requests |
FormDataRequest | Form data | File uploads |
EmptyBodyRequest | Query params | GET/DELETE |
Source-Specific Validation
Section titled “Source-Specific Validation”class CreateUserRequest extends JsonRequest { public function rules(): array { return [ self::SOURCE_JSON => [ 'email' => 'required|email', 'name' => 'required|string', ], self::SOURCE_QUERY => [ 'include' => 'array', ], ]; }}Controller Integration
Section titled “Controller Integration”class UserController { // Form request rules can come from controller public function getJsonRequestRules(): array { return [ 'POST' => ['email' => 'required'], 'PUT' => ['email' => 'sometimes'], ]; }}Summary
Section titled “Summary”| Package | Extends | Key Features |
|---|---|---|
| illuminate-database | Eloquent | Submodels, IAM auth, validation |
| illuminate-encryption | Encryption | ID encryption, static IV |
| illuminate-filesystem | Flysystem | Decorator chains |
| illuminate-http-problem-response | HTTP | RFC 7807 errors |
| illuminate-routing | Routing | No PATCH method |
| illuminate-validation | Validation | 12+ custom rules |
| laravel-restful | Controllers | RESTful traits |
| laravel-form-requests | Form Requests | Multi-source validation |