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

Events for Laravel funguje samostatne. Tieto recepty pripájajú ďalšie balíky Roundly, každý z nich je voliteľný.

Hostia bez účtu

Zúčastniť sa môže akýkoľvek model. Dajte hosťom vlastný model — s rovnakým typom kľúča, aký majú vaši používatelia —, umožnite mu prijímať e-maily a uveďte ho ako alias účastníka:

use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
use RoundlyConsulting\Events\Concerns\AttendsEvents;

final class Guest extends Model
{
    use AttendsEvents;
    use Notifiable;

    protected $fillable = ['name', 'email'];

    public function routeNotificationForMail(): string
    {
        return $this->email;
    }
}

// config/events.php
'attendees' => ['user' => App\Models\User::class, 'guest' => App\Models\Guest::class],

$guest = Guest::firstOrCreate(['email' => $request->string('email')], ['name' => $request->string('name')]);
Events::for($event)->rsvp($guest)->going();

Hosť nikdy nie je Authenticatable, takže na pozvánky odpovedá len tokenom; kontrola pozvaného sa týka len používateľských účtov. Model bez ciest pre notifikácie sa zúčastniť môže — len nedostáva žiadne notifikácie.

Tímy ako organizátori

S Teams for Laravel organizuje podujatia tím a spravuje ich každý jeho člen — členstvo v PHP aj v SQL, aby sa policy a managedBy() zhodli:

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Events\Concerns\OrganizesEvents;
use RoundlyConsulting\Events\Contracts\Organizer;
use RoundlyConsulting\Teams\Models\Team as BaseTeam;

final class Team extends BaseTeam implements Organizer
{
    use OrganizesEvents;

    public function allowsEventManagementBy(Model $user): bool
    {
        return $this->members()->where('member_type', $user->getMorphClass())->where('member_id', $user->getKey())->exists();
    }

    public function scopeManagingEventsFor(Builder $query, Model $user): void
    {
        $query->whereHas('members', fn (Builder $members) => $members
            ->where('member_type', $user->getMorphClass())->where('member_id', $user->getKey()));
    }
}
// config/teams.php: 'models' => ['team' => App\Models\Team::class]
// config/events.php: 'organizers' => ['user' => User::class, 'team' => App\Models\Team::class]

Na konkrétnu rolu ho zúžite (hasTeamRole()) pridaním podmienky do oboch metód.

Vlastné polia

Vymeňte model podujatia a dajte mu typované vlastné polia z Attributes for Laravel:

use RoundlyConsulting\Attributes\Contracts\HasAttributes as HasAttributesContract;
use RoundlyConsulting\Attributes\Facades\Attributes;
use RoundlyConsulting\Attributes\Traits\HasAttributes;

final class Event extends \RoundlyConsulting\Events\Models\Event implements HasAttributesContract
{
    use HasAttributes;
}
// config/events.php: 'models' => ['event' => App\Models\Event::class]

// define the field once (attributes-for-laravel's Attributes::define()), then:
Attributes::for($event)->set('dress_code', 'smart casual');

Diskusia pod podujatím

Diskusia pod každým podujatím cez Comments for Laravel:

use RoundlyConsulting\Comments\Facades\Comments;
use RoundlyConsulting\Comments\Traits\HasComments;

final class Event extends \RoundlyConsulting\Events\Models\Event
{
    use HasComments;
}
// config/events.php: 'models' => ['event' => App\Models\Event::class]

Comments::on($event)->as($user)->body('Is there parking nearby?')->post();

Kto smie komentovať, určte vlastnými oprávneniami podujatia — view, alebo rsvp, ak len účastníci.

Recenzie po podujatí

Recenzie od účastníkov po skončení podujatia cez Reviews for Laravel:

use Illuminate\Support\Facades\Event as EventBus;   // your Event model shadows Laravel's facade name
use RoundlyConsulting\Events\Enums\EventPhase;
use RoundlyConsulting\Events\Events\EventCompleted;
use RoundlyConsulting\Events\Facades\Events;
use RoundlyConsulting\Reviews\Concerns\HasReviews;
use RoundlyConsulting\Reviews\Facades\Reviews;

final class Event extends \RoundlyConsulting\Events\Models\Event
{
    use HasReviews;
}
// config/events.php: 'models' => ['event' => App\Models\Event::class]

EventBus::listen(EventCompleted::class, function (EventCompleted $completed): void {
    $attendees = Events::for($completed->event)->attendees()->checkedIn();   // invite them to review
});

if ($user->isGoingTo($event) && $event->phase === EventPhase::Completed) {
    Reviews::for($event)->by($user)->rating(5)->content('Great night')->verified()->create();
}

Pomer prebookovania pri bezplatných podujatiach

Pri bezplatných podujatiach ľudia často neprídu. Skutočnú veľkosť sály si držte vo vlastnom stĺpci a podujatiu dajte väčšiu kapacitu — čakacia listina, počítadlá aj check-in fungujú bez zmeny:

$room = 100;
Events::make('Free meetup')->organizedBy($user)->capacity((int) floor($room * 1.2))->tier('Free entry')->publish();

Check-in ukáže, kto naozaj prišiel (attendees()->checkedIn()); pomer upravujte podľa série podujatí.

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.