Skip to content

Instantly share code, notes, and snippets.

@edgrosvenor
edgrosvenor / AsPolymorphicEnum.php
Created April 6, 2026 05:39
Fat Enums: Polymorphic enum cast based on discriminator column
<?php
namespace App\Models;
use App\Enums\OrderStatus;
use App\Enums\TicketStatus;
use ArtisanBuild\FatEnums\Casts\AsPolymorphicEnum;
class Activity extends Model
{
@edgrosvenor
edgrosvenor / Permission.php
Last active April 6, 2026 19:11
Fat Enums: Bitmask cast for multiple enum states in one column
<?php
declare(strict_types=1);
namespace App\Enums;
enum Permission: int
{
case ViewReports = 0x1 << 0;
case EditContent = 0x1 << 1;
@edgrosvenor
edgrosvenor / PublishingWorkflow.php
Created April 6, 2026 05:39
Fat Enums: Publishing workflow state machine example
<?php
namespace App\Enums;
enum PublishingWorkflow: string implements StateMachine
{
use IsStateMachine;
public const DEFAULT = self::Draft;
@edgrosvenor
edgrosvenor / ModelHasStateMachine.php
Created April 6, 2026 05:39
Fat Enums: ModelHasStateMachine trait for Eloquent
<?php
namespace App\Models;
use App\Enums\OrderStatus;
use ArtisanBuild\FatEnums\Concerns\ModelHasStateMachine;
use Illuminate\Database\Eloquent\Model;
class Order extends Model
{
@edgrosvenor
edgrosvenor / StateMachineUsage.php
Created April 6, 2026 05:39
Fat Enums: Using the state machine - transitions and validation
<?php
$status = OrderStatus::Pending;
// Check if transition is valid
$status->canTransitionTo(OrderStatus::Processing); // true
$status->canTransitionTo(OrderStatus::Delivered); // false
// Perform the transition
$newStatus = $status->transitionTo(OrderStatus::Processing);
@edgrosvenor
edgrosvenor / OrderStatus.php
Created April 6, 2026 05:39
Fat Enums: State machine definition with transition attributes
<?php
namespace App\Enums;
use ArtisanBuild\FatEnums\Attributes\CanTransitionTo;
use ArtisanBuild\FatEnums\Attributes\CanTransitionToSelf;
use ArtisanBuild\FatEnums\Attributes\FinalState;
use ArtisanBuild\FatEnums\Concerns\IsStateMachine;
use ArtisanBuild\FatEnums\Contracts\StateMachine;
@edgrosvenor
edgrosvenor / WithDataExceptions.php
Created April 6, 2026 05:39
Fat Enums: WithData exceptions and ShouldThrow sentinel
<?php
// What happens when data is missing?
// 1. Missing the attribute entirely throws MissingDataAttributeException
#[WithData(['label' => 'Active'])]
case Active = 'active';
case Inactive = 'inactive'; // No attribute!
@edgrosvenor
edgrosvenor / SubscriptionTier.php
Created April 6, 2026 05:39
Fat Enums: WithData attribute example - SubscriptionTier
<?php
namespace App\Enums;
use ArtisanBuild\FatEnums\Attributes\WithData;
use ArtisanBuild\FatEnums\Concerns\HasKeyValueAttributes;
enum SubscriptionTier: string
{
use HasKeyValueAttributes;
/bin/bash -c "$(curl -fsSL https://php.new/install/linux)"
export PATH="/root/.config/herd-lite/bin/:$PATH"
composer config http-basic.composer.fluxui.dev {flux_username} {flux_key}
composer install
cp .env.example .env
php artisan key:generate
php artisan migrate --seed --force -n
npm install
npm run build
@edgrosvenor
edgrosvenor / Raffle.php
Last active July 17, 2024 19:12
Kind of like the Laravel Lottery helper, but with unlimited outcomes
<?php
use Illuminate\Support\Collection;
class Raffle
{
private int $total = 0;
private int $current = 0;
private Collection $entries;