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:
| Druh | Normalizácia | Predvolené pravidlá | Popis | Ikona |
|---|---|---|---|---|
email | Zmenšené písmená, orezané medzery. | required, string, email | envelope | |
phone | Oddeľ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}$/ | Phone | phone |
address | Orezané medzery. | required, string | Address | map-pin |
url | Doplní sa https://, ak chýba schéma. | required, string, url | Website | globe-alt |
social | Orezané medzery. | required, string | Social | at-symbol |
custom | Orezané medzery. | required, string | Other | identification |
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::Customlabel() 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 kryptomienOdoslaní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.