From ecfae3e01aa4afe023dec4321230a0bf35e9aabb Mon Sep 17 00:00:00 2001 From: Brian Rogers Date: Tue, 12 Dec 2023 13:57:42 -0700 Subject: [PATCH] using new style of attribute casting --- src/app/Models/Traits/FormattedPhoneTrait.php | 76 +++++++++---------- 1 file changed, 36 insertions(+), 40 deletions(-) diff --git a/src/app/Models/Traits/FormattedPhoneTrait.php b/src/app/Models/Traits/FormattedPhoneTrait.php index a5038ae..7bb5ab8 100644 --- a/src/app/Models/Traits/FormattedPhoneTrait.php +++ b/src/app/Models/Traits/FormattedPhoneTrait.php @@ -2,54 +2,50 @@ namespace App\Models\Traits; +use Illuminate\Database\Eloquent\Casts\Attribute; + trait FormattedPhoneTrait { /** * Format a phone number to be human readable. * - * @since 1.0.0 - * - * @return string - */ - public function getPhoneNumberAttribute(): string - { - $phoneLength = strlen($this->phone); - $phoneNumber = preg_replace('//', '', $this->phone); - - if ($phoneLength > 10) { - $countryCode = substr($phoneNumber, 0, $phoneLength - 10); - $areaCode = substr($phoneNumber, -10, 3); - $nextThree = substr($phoneNumber, -7, 3); - $lastFour = substr($phoneNumber, -4, 4); - - $phoneNumber = "({$areaCode}) {$nextThree}-{$lastFour}"; - } elseif ($phoneLength == 10) { - $areaCode = substr($phoneNumber, 0, 3); - $nextThree = substr($phoneNumber, 3, 3); - $lastFour = substr($phoneNumber, 6, 4); - - $phoneNumber = "({$areaCode}) {$nextThree}-{$lastFour}"; - } elseif ($phoneLength == 7) { - $nextThree = substr($phoneNumber, 0, 3); - $lastFour = substr($phoneNumber, 3, 4); - - $phoneNumber = "{$nextThree}-{$lastFour}"; - } - - return $phoneNumber; - } - - /** - * Remove all non-numeric characters from the phone number. - * - * @since 1.0.0 - * - * @param string $value + * @package Namespace\App\Contact + * @since 1.0.0 * * @return void */ - public function setPhoneNumberAttribute($value): void + protected function phoneNumber(): Attribute { - $this->attributes['phone'] = preg_replace('/[^0-9]/', '', $value); + return Attribute::make( + get: function (mixed $value, array $attributes) { + $phoneLength = strlen($attributes['phone_number']); + $phoneNumber = preg_replace('/[^0-9]/', '', $attributes['phone_number']); + + if ($phoneLength > 10) { + $countryCode = substr($phoneNumber, 0, $phoneLength - 10); + $areaCode = substr($phoneNumber, -10, 3); + $nextThree = substr($phoneNumber, -7, 3); + $lastFour = substr($phoneNumber, -4, 4); + + $phoneNumber = "({$areaCode}) {$nextThree}-{$lastFour}"; + } elseif ($phoneLength == 10) { + $areaCode = substr($phoneNumber, 0, 3); + $nextThree = substr($phoneNumber, 3, 3); + $lastFour = substr($phoneNumber, 6, 4); + + $phoneNumber = "({$areaCode}) {$nextThree}-{$lastFour}"; + } elseif ($phoneLength == 7) { + $nextThree = substr($phoneNumber, 0, 3); + $lastFour = substr($phoneNumber, 3, 4); + + $phoneNumber = "{$nextThree}-{$lastFour}"; + } + + return $phoneNumber; + }, + set: function (mixed $value) { + return preg_replace('/[^0-9]/', '', $value); + }, + ); } }