agenciafmd / filament-settings
Filament - Settings
Requires
- php: ^8.4
- agenciafmd/filament-admix: v1.x-dev|dev-master
- filament/spatie-laravel-settings-plugin: ^5.11
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-11-06 20:04:57 UTC
README
Configurações do site editáveis no painel administrativo (Admix), sobre o
spatie/laravel-settings e o plugin oficial
filament/spatie-laravel-settings-plugin.
Já traz as páginas:
| Página | Campo | Componente no site |
|---|---|---|
analytics_id (G-XXXXXXXXXX) |
<x-filament-settings::google-analytics /> |
|
tag_manager_id (GTM-XXXXXXX) |
<x-filament-settings::gtm-head /> e <x-filament-settings::gtm-body /> |
|
site_verification |
<x-filament-settings::site-verification /> |
|
| Meta | pixel_id |
<x-filament-settings::meta-pixel /> |
| Scripts | header |
<x-filament-settings::header-scripts /> |
footer |
<x-filament-settings::footer-scripts /> |
Requisitos
- PHP ^8.4
- Filament ^5.11
- agenciafmd/filament-admix v1.x-dev | dev-master
- filament/spatie-laravel-settings-plugin ^5.11 (instala o
spatie/laravel-settings)
Instalação
- Instale o pacote via Composer:
composer require agenciafmd/filament-settings
- Execute as migrações. O pacote cria a tabela
settingse as propriedades de cada página (migrations emdatabase/settings):
php artisan migrate
Não publique a migration
create_settings_tabledospatie/laravel-settings: o pacote já cria a tabela (e pula a criação se ela já existir).
Ativando no painel
Adicione o plugin na config do Admix config/filament-admix.php:
use Agenciafmd\Settings\SettingsPlugin; return [ 'plugins' => [ SettingsPlugin::class, ], ];
As páginas ficam no cluster SettingsCluster: um único item Configurações no menu, com navegação própria entre
Google, Meta e Scripts. As URLs são /admix/settings/{google,meta,scripts}, e /admix/settings redireciona para a
primeira página.
Acesso
Somente administradores (usuários sem grupo) acessam as páginas. Elas não são Resources, então não aparecem na matriz de permissões de Grupos; e os scripts cadastrados são impressos sem escape em todas as páginas do site.
Configuração
config/filament-settings.php:
return [ 'name' => 'Settings', // label do cluster no menu (traduzido) 'navigation_group' => null, // grupo do cluster no menu (traduzido); null deixa fora de um grupo 'navigation_sort' => 90, // posição do cluster no menu ];
Uso no site
Inclua os componentes no layout. O frontend::master já faz isso:
<head> <x-filament-settings::site-verification /> <x-filament-settings::gtm-head /> <x-filament-settings::google-analytics /> <x-filament-settings::meta-pixel /> ... <x-filament-settings::header-scripts /> </head> <body> <x-filament-settings::gtm-body /> ... <x-filament-settings::footer-scripts /> </body>
Cada componente só imprime algo quando o campo está preenchido. O GTM é carregado na primeira interação do usuário (ou
1s após o load), para não disputar banda com a renderização da página.
Para ler um valor no código:
use Agenciafmd\Settings\Settings\GoogleSettings; app(GoogleSettings::class)->tag_manager_id;
Criptografia dos scripts
O header e o footer da ScriptsSettings são gravados criptografados com a APP_KEY (#[ShouldBeEncrypted]). Como a criptografia do Laravel é autenticada, quem consegue escrever no banco, mas não tem a chave, não consegue gravar um script que chegue ao site. Se o valor não descriptografar, o componente não imprime nada e reporta a DecryptException, sem derrubar a página.
- Não protege contra quem tem a
APP_KEYnem contra quem cria um admin no banco e cadastra o script pelo admix: é uma camada a mais, não a única. - Um dump restaurado em um ambiente com outra
APP_KEYperde os scripts no site, e a página Scripts do admix dá erro até os valores serem gravados de novo. - Ao trocar a
APP_KEY, coloque a chave antiga emAPP_PREVIOUS_KEYSpara continuar lendo os valores. - Os IDs (Google e Meta) não são criptografados: eles já aparecem no HTML público.
- Para uma nova propriedade sensível, use
#[ShouldBeEncrypted]na classe e$this->migrator->addEncrypted('grupo.propriedade')na migration (ouencrypt()para uma que já existe).
Cache
- Cada página do site lê as settings do banco. Para guardar em cache, use
SETTINGS_CACHE_ENABLED=true(config dospatie/laravel-settings). - Com o
PageCacheEventSubscriberdo pacotefrontend, salvar qualquer settings apaga todo opublic/page-cache, já que esses valores aparecem em todas as páginas.
Nova página de configuração
- Crie a classe em
src/Settings(estendeSpatie\LaravelSettings\Settings, comgroup()) e inclua emSettingsServiceProvider::SETTINGS. - Crie a migration das propriedades em
database/settings($this->migrator->add('grupo.propriedade')). - Crie a página em
src/PagesestendendoFilament\Pages\SettingsPage, com$cluster = SettingsCluster::class, o traitInteractsWithSettingsPage(acesso, título e ordem),label()enavigationOffset()(posição dentro do cluster). - Registre a página no
SettingsPlugin.
Testes
vendor/bin/pest packages/agenciafmd/filament-settings/tests
Licença
Este pacote é software livre e está disponível nos termos da licença MIT.