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

Fasáda Connections

Fasáda Connections je verejné API balíka — dostanete sa cez ňu ku každej operácii a je to odporúčaný spôsob použitia. Jej koreňom je RoundlyConsulting\Connections\ConnectionManager, singleton v kontajneri, a metódy traitu HasConnections delegujú na ten istý manažér (ďalšie vstupné body opisuje časť DI a akcie):

MetódaVraciaÚčel
Connections::between($connector, $connectable)PendingConnectionPlynulý builder pre jednu dvojicu.
Connections::from($connector)PendingConnectionBuilder, ktorému connectable doplníte neskôr (to(), toMany()), alebo zosúladenie cez sync().
Connections::expiring(int $days = 7)Builder<Connection>Všetky živé prepojenia, ktoré vypršia v danom okne, naprieč všetkými connectormi.
Connections::prune()intSoft-delete expirovaných prepojení; vráti ich počet.
Connections::flushCache()voidVyprázdni cache oprávnení v rámci requestu.
Connections::fake()ConnectionFakeZaznamenávajúci fake pre testy — pozrite Testovanie.

between() začne builder pre dvojicu; from() začne builder pre connector a connectable doplníte neskôr cez to():

use RoundlyConsulting\Connections\DataTransferObjects\SyncTarget;
use RoundlyConsulting\Connections\Facades\Connections;

// Create the connection, or update the pair's existing one, with permissions and an expiry.
Connections::between($user, $team)
    ->withPermissions('view', 'edit')
    ->expiresIn(now()->addMonth())   // CarbonInterface, CarbonInterval, or seconds
    ->connect();

// Defer the connectable until later with from()->to().
Connections::from($user)->to($team)->withPermissions('view')->connect();

// Move the expiry, or clear it with null.
Connections::between($user, $team)->extend(now()->addYear());
Connections::between($user, $team)->extend(null);

// Look the pair up.
Connections::between($user, $team)->exists();   // bool — an active connection exists
Connections::between($user, $team)->find();     // ?Connection — in any status

// Remove the connection (soft delete).
Connections::between($user, $team)->disconnect();

// Reconcile a connector to exactly this set (connect missing, disconnect extras).
Connections::from($user)->sync([$teamA, new SyncTarget($teamB, permissions: ['read'])]); // SyncResult

// Connections expiring within 14 days, across every connector.
Connections::expiring(14)->with('connector')->get();

// Remove all expired connections, returning how many were removed.
$removed = Connections::prune();

// Drop the in-request permission cache mid-request (it already resets per request / job).
Connections::flushCache();

Cache sa pri každom zápise automaticky invaliduje, takže kontrola po zápise zmenu zohľadní aj bez parametra force.

Príprava prepojenia

Modifikátory len pripravia stav na builderi; nič sa nezapíše, kým nezavoláte terminálne sloveso:

use Carbon\CarbonInterval;
use RoundlyConsulting\Connections\Facades\Connections;

$connection = Connections::from($user)
    ->to($team)                              // the connectable (or start with between())
    ->withPermissions('view', 'edit')        // staged permissions, de-duplicated
    ->withPermissions('publish')             // repeated calls add to the staged set
    ->expiresIn(CarbonInterval::days(30))    // CarbonInterface, CarbonInterval or seconds
    ->withMeta(['source' => 'signup'])       // merged into the meta bag
    ->connect();                             // terminal verb: returns the Connection
  • to($connectable) — nastaví connectable, ak builder začal cez from().
  • toMany($connectables) — pripraví viac connectables pre hromadné slovesá (pozrite Hromadné operácie a sync).
  • withPermissions(...$permissions) — pripraví oprávnenia; ďalšie volania ich pridávajú a duplicity sa odstránia.
  • expiresIn($value) — okamih CarbonInterface, CarbonInterval od teraz alebo celé číslo sekúnd od teraz.
  • expiringAt(?$instant) — presný okamih expirácie alebo null bez expirácie.
  • withMeta($array) / replaceMeta() — pripraví metadáta; zlúčia sa s uloženými, pokiaľ nezavoláte replaceMeta().
  • asPending() — vytvorí prepojenie v stave pending; invite() je skratka pre asPending()->connect().

Terminálne slovesá

SlovesoVraciaČo robí
connect()ConnectionVytvorí dvojicu, pri existujúcom prepojení zmení len pripravené; oživí soft-deleted dvojicu.
invite()Connectionconnect() v stave pending; nad prijatým či zablokovaným prepojením vyhodí InvalidStatusTransition.
accept() / block()ConnectionZmení stav; ak prepojenie neexistuje, vyhodí ConnectionNotFound. Blokovanie zruší jedine accept().
disconnect()voidSoft delete; ak prepojenie neexistuje, vyhodí ConnectionNotFound.
toggle()?ConnectionAktívne prepojenie odpojí (vráti null), inak prepojí — blokovanie nezruší a expiráciu neobnoví.
reconnect() / restore()ConnectionObnoví soft-deleted prepojenie s jeho oprávneniami, expiráciou a meta, alebo vytvorí nové.
permissions()ConnectionPermissionsSada oprávnení dvojice: grant, revoke, sync, clear, all, has, hasAny, hasAll — pozrite Oprávnenia.
extend(?$expiresAt)ConnectionPosunie alebo zruší expiráciu; vyhodí ConnectionNotFound.
exists()boolČi je dvojica prepojená (pri zapnutom enforce_active_on_check len aktívne).
find()?ConnectionPrepojenie dvojice v ľubovoľnom stave, alebo null, ak neexistuje (či je soft-deleted).
sync($connectables)SyncResultZosúladí connector presne s touto množinou položiek Connectable alebo SyncTarget — pozrite Hromadné operácie a sync.
connectAll() / grantAll() / revokeAll()CollectionHromadné slovesá nad cieľmi z toMany().
disconnectAll()voidHromadné odpojenie cieľov z toMany().

Sada oprávnení permissions()

between()->permissions() je sada oprávnení jedného prepojenia — grant(), revoke(), sync() a clear() ju menia; all(), has(), hasAny() a hasAll() ju čítajú (pozrite Oprávnenia):

use RoundlyConsulting\Connections\Facades\Connections;

$permissions = Connections::between($user, $team)->permissions();

$permissions->grant('publish');          // Connection — creates the connection if absent
$permissions->revoke('publish');         // Connection — throws ConnectionNotFound if absent
$permissions->sync('view', 'edit');      // Connection — exact set, creates if absent
$permissions->clear();                   // Connection — remove every permission; throws ConnectionNotFound if absent

$permissions->all();                     // Collection<int, string> — what is stored
$permissions->has('edit');               // bool
$permissions->hasAny('view', 'edit');    // bool
$permissions->hasAll('view', 'edit');    // bool

Opätovné prepojenie je bezpečné

Dvojica má najviac jeden riadok prepojenia a connect() nad dvojicou, ktorá ho už má, zmení len to, čo pripravíte: stav, oprávnenia, expirácia aj meta zostanú, pokiaľ ich znova nezadáte (meta sa zlučuje — pozrite Metadáta). Predvolené hodnoty z konfigurácie — default_permissions, default_status a expiry.default — platia len pre nové prepojenia. Expiráciu zrušíte cez extend(null); ak chcete zmeniť jediný atribút, použite jeho vlastné sloveso:

Connections::between($user, $team)
    ->withPermissions('view', 'edit')
    ->expiresIn(now()->addMonth())
    ->connect();

// Re-connecting only changes what you stage: status, permissions and expiry are kept.
Connections::between($user, $team)->withMeta(['note' => 'hi'])->connect();   // merge; perms + expiry kept

// Config defaults (default_permissions, default_status, expiry.default) apply to new
// connections only. To clear an expiry or change one attribute, use its dedicated verb:
Connections::between($user, $team)->extend(null);
Connections::between($user, $team)->permissions()->grant('publish');
Connections::between($user, $team)->accept();

Po disconnect() alebo upratovaní connect() — a tiež grant(), permissions()->sync(), invite(), toggle() a sync() — oživí dvojicu ako nové prepojenie; výnimkou je zablokovaná dvojica, ktorá zostane zablokovaná (pozrite Pozvánky a stavy).

Terminálne slovesá potrebujú connectable. Ak jedno zavoláte po from() bez to() — alebo hromadné sloveso bez toMany() — vyhodí sa MissingConnectable:

Connections::from($user)->connect();       // throws MissingConnectable — call to() first
Connections::from($user)->connectAll();    // throws MissingConnectable — call toMany() first

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.