Skip to content

Laravel Eloquent caster for convenient name formatting

License

Notifications You must be signed in to change notification settings

dwightwatson/nameable

Repository files navigation

nameable

Latest Version on Packagist Build Status Total Downloads

This package provides a caster and a formatter class for presenting your user's names. It can get a user's first, last or full name, their initials, and common abbreviations. Instead of separating the fields over a few database columns you can store a user's name in a single column and fetch what you need.

This package is based upon Basecamp's name_of_person package for Ruby/Rails.

Installation

You can install the package via Composer:

composer require watson/nameable

Then use the Nameable cast for any Eloquent models you want to use as a name.

use Watson\Nameable\Nameable;

class User extends Model
{
    protected $casts = [
        'name' => Nameable::class,
    ];
}

Alternatively, you can interact with the Name class directly.

use Watson\Nameable\Name;

$name = new Name('Dwight', 'Conrad Watson');

$name = Name::from('Dwight Conrad Watson');

Usage

$user = new User(['name' => 'Dwight Watson']);

$user->name->full        // Dwight Watson
$user->name->first       // Dwight
$user->name->last        // Watson
$user->name->familiar    // Dwight W. 
$user->name->abbreviated // D. Watson
$user->name->sorted      // Watson, Dwight
$user->name->initials    // DW

In addition there are possessive variants you can use which will work correctly with names that end in s.

$user = new User(['name' => 'Dwight Watson']);

$user->name->full_possessive        // Dwight Watson's
$user->name->first_possessive       // Dwight's
$user->name->last_possessive        // Watson's
$user->name->abbreviated_possessive // D. Watson's
$user->name->sorted_possessive      // Watson, Dwight's
$user->name->initials_possessive    // DW's

$user = new User(['name' => 'Angus Young']);
$user->name->full_possessive        // Angus Young's
$user->name->first_possessive       // Angus'

If a user doesn't provide a full name (for example, just a first name) the attributes will just omit the last name.

License

The MIT License (MIT). Please see License File for more information.

About

Laravel Eloquent caster for convenient name formatting

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages