lasserafn/php-initials
Framework-agnostic PHP library to generate name initials (UTF-8 safe, including emojis). Supports constructor or fluent API to set name and initials length, generate initials, and get URL-friendly initials. Ideal for avatars, labels, and user badges.
Installation
composer require lasserafn/php-initials
Add to composer.json if not using Composer directly:
"require": {
"lasserafn/php-initials": "^1.0"
}
Basic Usage Import the class and generate initials:
use Lasser\Initials\Initials;
$initials = Initials::from('John Doe');
echo $initials; // Output: "JD"
First Use Case Display user avatars with initials in a Laravel Blade view:
// In a controller
$userInitials = Initials::from($user->name);
// In Blade
<div class="avatar">{{ $userInitials }}</div>
src/Initials.php for customization options (e.g., separator, max length).Generating Initials
// Basic
Initials::from('Jane Elizabeth Smith'); // "JS"
// With custom separator
Initials::from('Jane Elizabeth Smith', '-'); // "J-E-S"
Integration with Laravel
// app/Providers/AppServiceProvider.php
public function register()
{
$this->app->singleton(Initials::class);
}
app/helpers.php:
if (!function_exists('getInitials')) {
function getInitials($name, $separator = '') {
return \Lasser\Initials\Initials::from($name, $separator);
}
}
Dynamic Avatar Generation
Combine with Laravel’s Str::upper() and CSS for styled avatars:
$initials = Str::upper(Initials::from($user->name));
// CSS: .avatar { background: linear-gradient(to right, #ff6b6b, #4ecdc4); color: white; }
Handling Edge Cases
$initials = Initials::from($user->name ?? 'N/A');
Validator to ensure names are sanitized before processing:
$validator = Validator::make(['name' => $request->name], [
'name' => 'required|string|max:255',
]);
$initials = Cache::remember("user-{$user->id}-initials", now()->addHours(1), function() use ($user) {
return Initials::from($user->name);
});
Locale/Encoding Issues
mb_substr() for multibyte support:
mb_substr($name, 0, 1, 'UTF-8');
Middle Name Handling
getInitials() method to include/exclude middle names:
Initials::from('John Michael Doe', '', 2); // "JMD" (3rd param = max letters)
Separator Quirks
Initials::from('John Michael Doe', '-'); // "J-M-D" (not "J-M")
Case Sensitivity
Str::upper() if consistency is needed:
Str::upper(Initials::from('john doe')); // "JD"
\Log::debug('Name:', [$user->name, Initials::from($user->name)]);
"")."Alice" → "A")."Bob123" → "B").Custom Initials Logic
Override the Initials class to implement business rules (e.g., prioritize certain names):
class CustomInitials extends \Lasser\Initials\Initials {
public static function from($name, $separator = '', $maxLetters = 2) {
$parts = explode(' ', $name);
$initials = [];
foreach ($parts as $part) {
if (strpos($part, ' ') !== false) { // Handle "Van" in "Van Helsing"
$initials[] = mb_substr($part, 0, 1);
}
}
return implode($separator, array_slice($initials, 0, $maxLetters));
}
}
Laravel Service Provider Binding
Bind your custom class in AppServiceProvider:
$this->app->bind(\Lasser\Initials\Initials::class, function() {
return new \App\Services\CustomInitials();
});
Package Configuration
If the package supported config (e.g., default separator), add to config/initials.php:
return [
'default_separator' => '-',
'max_letters' => 2,
];
Then extend the class to read these values.
How can I help you explore Laravel packages today?