Search by

agenciafmd / filament-settings

agenciafmd

Filament - Settings

Package info

github.com/agenciafmd/filament-settings

pkg:composer/agenciafmd/filament-settings

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-master 2026-11-05 22:04 UTC

This package is auto-updated.

Last update: 2026-11-06 20:04:57 UTC


README

Licença

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

  1. Instale o pacote via Composer:
composer require agenciafmd/filament-settings
  1. Execute as migrações. O pacote cria a tabela settings e as propriedades de cada página (migrations em database/settings):
php artisan migrate

Não publique a migration create_settings_table do spatie/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_KEY nem 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_KEY perde 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 em APP_PREVIOUS_KEYS para 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 (ou encrypt() 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 do spatie/laravel-settings).
  • Com o PageCacheEventSubscriber do pacote frontend, salvar qualquer settings apaga todo o public/page-cache, já que esses valores aparecem em todas as páginas.

Nova página de configuração

  1. Crie a classe em src/Settings (estende Spatie\LaravelSettings\Settings, com group()) e inclua em SettingsServiceProvider::SETTINGS.
  2. Crie a migration das propriedades em database/settings ($this->migrator->add('grupo.propriedade')).
  3. Crie a página em src/Pages estendendo Filament\Pages\SettingsPage, com $cluster = SettingsCluster::class, o trait InteractsWithSettingsPage (acesso, título e ordem), label() e navigationOffset() (posição dentro do cluster).
  4. 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.