apsonex / swap-placeholder
Swap Placeholder
1.0.1
2025-07-30 12:14 UTC
Requires
- php: ^8.3
- illuminate/collections: ^12.21
- illuminate/pipeline: ^12.21
- illuminate/support: ^12.21
Requires (Dev)
- fakerphp/faker: ^1.24
- pestphp/pest: ^3.8
- phpunit/phpunit: ^11.5
- symfony/var-dumper: ^7.3
This package is auto-updated.
Last update: 2025-07-30 12:14:38 UTC
README
Package: apsonex/swap-placeholder
A simple and flexible PHP package to dynamically swap out placeholders in strings using resource data and resolver classes.
🚀 Features
- Define your own placeholder format (e.g.
__PLACEHOLDER__
) - Attach resource models (like
Lead
,Company
, etc.) - Implement your own resolver logic
- Easily swap placeholders in strings for dynamic content generation
📦 Installation
composer require apsonex/swap-placeholder
🧠Usage Example
\Apsonex\SwapPlaceholder\SwapPlaceholder::make() ->fresh() ->placeholderIdentity('__') ->addResource(Lead::class, Lead::first()) ->sources([ PlaceholderResolver\LeadPlaceholderResolver::class, ]) ->targetString('Some string with __LEAD_NAME__, __LEAD_EMAIL__, __COMPANY_NAME__ & __COMPANY_EMAIL__') ->handle() ->output();
🧩 Creating a Placeholder Resolver
Each resolver class should extend the BasePlaceholderResolver
and implement the PlaceholderResolverContract
.
<?php namespace App\Support\PlaceholderResolver; use App\Models\Lead; use Apsonex\SwapPlaceholder\BasePlaceholderResolver as Base; use Apsonex\SwapPlaceholder\PlaceholderResolverContract; class LeadPlaceholderResolver extends Base implements PlaceholderResolverContract { protected string $resolverId = Lead::class; // or any unique string ID // Optionally override methods to define how placeholders are resolved }
✅ Testing Example
it('swap_placeholder_works', function () { $output = Apsonex\SwapPlaceholder\SwapPlaceholder::make() ->fresh() ->placeholderIdentity('__') ->addResource(Lead::class, new Lead) ->addResource(Company::class, new Company) ->sources([ \Tests\Fixtures\Resolvers\LeadPlaceholderResolver::class, \Tests\Fixtures\Resolvers\CompanyPlaceholderResolver::class, ]) ->targetString('Some string with __LEAD_NAME__, __LEAD_EMAIL__, __COMPANY_NAME__ & __COMPANY_EMAIL__') ->handle() ->output(); expect( $output === 'Some string with John Doe, email@example.com, Abc Inc. & info@company.com' )->toBeTrue(); });
📄 License
MIT © Apsonex Inc.