Installation:
composer require laraveldaily/filateams
php artisan migrate # Runs FilaTeams migrations
Ensure this is done before building Filament resources/pages.
User Model Update:
Add traits to app/Models/User.php:
use LaravelDaily\FilaTeams\Concerns\HasTeams;
use LaravelDaily\FilaTeams\Concerns\HasTeamMembership;
First Use Case:
php artisan make:filament-user).admin, member).config/filateams.php (customize team defaults, roles, or branding).vendor/laraveldaily/filateams/src/Resources/ (extend via service providers).database/migrations/.../create_teams_tables.php (if customizing schema).Team Creation & Management:
/resources/filateams/team-resource.php) to customize fields (e.g., add description or logo).Team model (app/Models/Team.php) to add custom logic:
class Team extends \LaravelDaily\FilaTeams\Models\Team
{
protected $fillable = ['custom_field'];
}
Role-Based Access:
public function viewAny(Team $team): bool
{
return $team->members()->where('user_id', auth()->id())->exists();
}
Tenancy Integration:
auth()->user()->currentTeam to access the active team in:
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()->where('team_id', auth()->user()->currentTeam->id);
}
Invitations:
php artisan vendor:publish --tag=filateams-views
Then edit resources/views/vendor/filateams/emails/invite.blade.php.TeamSwitcher widget to your dashboard:
use LaravelDaily\FilaTeams\Widgets\TeamSwitcher;
public function getWidgets(): array
{
return [
TeamSwitcher::class,
];
}
Route::middleware(['auth', 'team'])->group(function () {
// Team-restricted routes
});
public static function getApiResource(): ?string
{
return \LaravelDaily\FilaTeams\Http\Resources\TeamResource::class;
}
Migration Order:
php artisan migrate after installing FilaTeams but before creating custom migrations that might conflict with its tables (teams, team_memberships, etc.).Tenancy Conflicts:
'tenancy' => [
'driver' => 'filateams', // Override Stancl's driver
],
Role Permissions:
admin, member) are hardcoded. To add custom roles:
TeamRole model:
class TeamRole extends \LaravelDaily\FilaTeams\Models\TeamRole
{
protected static array $customRoles = ['editor'];
}
'roles' => [
'admin', 'member', 'editor', // Add custom roles
],
Team Switching:
currentTeam relation is cached. Clear it manually if needed:
auth()->user()->currentTeam->refresh();
event(new \LaravelDaily\FilaTeams\Events\TeamSwitched);
config/filateams.php:
'debug' => env('FILATEAMS_DEBUG', false),
DB::enableQueryLog() to inspect team-related queries.php artisan db:seed --class=FilaTeamsDatabaseSeeder
Custom Fields:
Team model and sync with the Resource:
public static function form(Form $form): Form
{
return $form
->schema([
// ... existing fields
TextInput::make('custom_field')->required(),
]);
}
Webhooks:
TeamCreated):
use LaravelDaily\FilaTeams\Events\TeamCreated;
public function boot()
{
event(TeamCreated::class, function (TeamCreated $event) {
// Send Slack notification, etc.
});
}
UI Customization:
php artisan vendor:publish --tag=filateams-views
resources/views/vendor/filateams/partials/team-switcher.blade.php to change the UI.API Extensions:
class CustomTeamResource extends \LaravelDaily\FilaTeams\Http\Resources\TeamResource
{
public function toArray($request): array
{
return array_merge(parent::toArray($request), [
'custom_field' => $this->custom_field,
]);
}
}
Then bind it in AppServiceProvider:
\LaravelDaily\FilaTeams\Http\Resources\TeamResource::macro('custom', fn () => CustomTeamResource::class);
How can I help you explore Laravel packages today?