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 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.