NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Contacts for Laravel

Druhy kontaktov a normalizácia

RoundlyConsulting\Contacts\Enums\ContactType je reťazcový backed enum so šiestimi druhmi: Email, Phone, Address, Url, Social a Custom. Každý druh určuje normalizáciu, validáciu, preložiteľný popis a názov ikony:

DruhNormalizáciaPredvolené pravidláPopisIkona
emailZmenšené písmená, orezané medzery.required, string, emailEmailenvelope
phoneOddeľovače odstránené, úvodné + zachované, 00 sa číta ako +, (0) za predvoľbou sa vynechá; default_country_code nahradí úvodnú 0 vnútroštátneho čísla.required, string, regex:/^\+?[1-9]\d{6,14}$/Phonephone
addressOrezané medzery.required, stringAddressmap-pin
urlDoplní sa https://, ak chýba schéma.required, string, urlWebsiteglobe-alt
socialOrezané medzery.required, stringSocialat-symbol
customOrezané medzery.required, stringOtheridentification

Normalizácia

Normalizácia je čisté PHP bez externých knižníc. Prebehne pred validáciou pri každom pridaní, úprave a synchronizácii, takže to isté číslo sa nikdy neuloží piatimi rôznymi spôsobmi:

use RoundlyConsulting\Contacts\Enums\ContactType;

ContactType::Email->normalize(' [email protected] ');  // '[email protected]'
ContactType::Phone->normalize('+421 (900) 000-000');      // '+421900000000'
ContactType::Phone->normalize('+44 (0)20 7946 0000');     // '+442079460000' — the (0) is dropped
ContactType::Phone->normalize('00421 900 123 456');       // '+421900123456' — 00 reads as +
ContactType::Phone->normalize('0900 123 456');            // '0900123456' — bare digits
// ...or '+421900123456' with CONTACTS_DEFAULT_COUNTRY_CODE=421 (trunk 0 replaced)
ContactType::Url->normalize('example.com');               // 'https://example.com'
ContactType::Url->normalize('ftp://files.example.com');   // unchanged — has a scheme
ContactType::Social->normalize('  @janedoe ');            // '@janedoe'

Normalizácia telefónu je orientačné E.164. Úvodné 00 sa číta ako + a (0) za predvoľbou krajiny sa vynechá. Ak je nastavený default_country_code (napríklad 421), vnútroštátne číslo ho dostane namiesto úvodnej 0 — z 0900 123 456 bude +421900123456; Taliansko a San Maríno si 0 ponechajú, lebo je súčasťou ich čísel. Bez neho si vnútroštátne číslo ponechá holé číslice.

Pravidlá sa vždy vyhodnocujú na normalizovanej hodnote — na tom, čo sa uloží — a každá hodnota má strop 255 znakov, dĺžku stĺpca value. Hodnota, ktorá nevyhovie jednému či druhému, vyhodí InvalidContactValue ešte pred akýmkoľvek zápisom.

Popisy, ikony a pravidlá

ContactType::Phone->label();              // 'Phone' — config, then translation, then value
ContactType::Phone->icon();               // 'phone'
ContactType::Phone->validationRules();    // ['required', 'string', 'regex:/^\+?[1-9]\d{6,14}$/']
ContactType::Phone->rules();              // ['required', 'string', new ValidContactValue(ContactType::Phone)]
ContactType::fromValueOrCustom('email');  // ContactType::Email
ContactType::fromValueOrCustom('fax');    // ContactType::Custom

label() sa vyhodnocuje v poradí: popis nastavený v contacts.types, potom preklad contacts::types a nakoniec hodnota s veľkým začiatočným písmenom. Na preklad vstavaných popisov publikujte contacts-translations.

Pomocníci enumu

ContactType používa aj trait Helpers z enums-for-laravel pre výberové zoznamy a validáciu. Jeho vlastný label(), ktorý zohľadňuje konfiguráciu aj preklady, má prednosť pred jednoduchou verziou z traitu:

ContactType::values();          // Collection: 'email', 'phone', 'address', 'url', 'social', 'custom'
ContactType::options();         // EnumOption DTOs {value, label, name} for selects
ContactType::validationRule();  // 'in:email,phone,address,url,social,custom'
$type->isIn([ContactType::Email, ContactType::Phone]);

validationRule() obsahuje len šesť vstavaných hodnôt. Ak chcete akceptovať aj registrované vlastné druhy, použite ContactRules::kinds() — pozrite Validácia.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.