Všetky balíky
Contacts for Laravel
Synchronizácia kontaktov
Contacts::for($owner)->sync() je stavaný pre formulár „správa kontaktov“: odovzdajte mu úplný zoznam pre jeden druh a sám zistí, čo pridať, upraviť a odstrániť:
use RoundlyConsulting\Contacts\Facades\Contacts;
use RoundlyConsulting\Contacts\DataTransferObjects\ContactData;
use RoundlyConsulting\Contacts\Enums\ContactType;
$phones = Contacts::for($user)->sync(ContactType::Phone, [
new ContactData(ContactType::Phone, '+421900000000', label: 'Mobile', isPrimary: true),
new ContactData(ContactType::Phone, '+421900111222', label: 'Office'),
]);
$phones->pluck('position'); // [0, 1] — input order- Existujúce kontakty, ktorých normalizovaná hodnota sa zhoduje s položkou, sa upravia na mieste — popis, kategória, meta a pozícia; isPrimary: true kontakt povýši.
- Položky bez zhody sa vytvoria cez akciu pridania (normalizácia, validácia, automatický primárny).
- Existujúce kontakty daného druhu, ktoré v zozname chýbajú, sa soft-zmažú.
- Ak je medzi zmazanými primárny kontakt a žiadna položka nežiada isPrimary, primárnym sa stane prvý synchronizovaný kontakt (auto_primary) — vrátená kolekcia to už zohľadňuje.
- position zodpovedá poradiu vstupu a vrátená kolekcia toto poradie zachováva.
- Každá zmena spustí vlastnú udalosť ContactAdded, ContactUpdated alebo ContactDeleted.
Každá položka sa uloží pod druhom odovzdaným do sync(), bez ohľadu na typ v DTO. Synchronizácia prázdneho zoznamu odstráni všetky kontakty daného druhu.
Z controllera
public function update(Request $request): RedirectResponse
{
$validated = $request->validate([
'phones' => ['array'],
'phones.*.value' => ContactType::Phone->rules(),
'phones.*.label' => ['nullable', 'string'],
]);
Contacts::for($request->user())->sync(ContactType::Phone, array_map(
fn (array $row) => new ContactData(ContactType::Phone, $row['value'], label: $row['label'] ?? null),
$validated['phones'] ?? [],
));
return back();
}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.