DEV Community

Syahril Zulkefli
Syahril Zulkefli

Posted on

Filament Breezy: set storage disk for avatar

If you're utilizing the Breezy plugin, all user avatars are uploaded to the /storage/app/public directory. If you prefer to keep your avatars organized in a sub-folder, just follow these steps.

Step 1: Create a new storage disk

Begin by adding a new storage disk configuration in your /config/filesystems.php.

    'disks' => [

        ...
        ...

        'avatars' => [
            'driver' => 'local',
            'root' => storage_path('app/public/avatars'),
            'url' => env('APP_URL').'/storage/avatars',
            'visibility' => 'public',
            'throw' => false,
        ],
    ],
Enter fullscreen mode Exit fullscreen mode

Step 2: Extend the BreezyCore class

To set the storage disk, we need to override a method. Create a new class that extends \Jeffgreco13\FilamentBreezy\BreezyCore and place it somewhere in your /app directory. In my case, I placed it in the /app/Filament/Plugins folder.

<?php

namespace App\Filament\Plugins;

use Filament\Forms;

class BreezyCore extends \Jeffgreco13\FilamentBreezy\BreezyCore
{
    public function getAvatarUploadComponent()
    {
        $fileUpload = Forms\Components\FileUpload::make('avatar_url')
            ->disk('avatars')
            ->label(__('filament-breezy::default.fields.avatar'))
            ->avatar();

        return is_null($this->avatarUploadComponent) ? $fileUpload : $this->evaluate($this->avatarUploadComponent, namedInjections: [
            'fileUpload' => $fileUpload,
        ]);
    }
}
Enter fullscreen mode Exit fullscreen mode

Step 3: Set storage disk in your User model

Update the getFilamentAvatarUrl() function found in your /app/Models/User file and configure the storage disk accordingly.

public function getFilamentAvatarUrl(): ?string
{
    return $this->avatar_url ? Storage::disk('avatars')
        ->url($this->avatar_url) : null;
}
Enter fullscreen mode Exit fullscreen mode

Step 4: Register the plugin in your Filament service provider.

Update the plugin class that you previously registered in your Filament service provider to use the new class.

->plugins([
    \App\Filament\Plugins\BreezyCore::make()
]);
Enter fullscreen mode Exit fullscreen mode

Now your avatars should be more organized than before.

Top comments (1)

Collapse
 
kristi11 profile image
Kristi Tanellari

I'm happy to confirm that this works. Just follow the same exact steps above. Thank you brother