O poder do FilamentPHP
Tags: laravel, php, livewire, webdev
Published: 2024-02-06 22:21:59

Neste artigo vou apresentar uma ferramenta poderosa, incrivelmente fácil de usar e como ela pode deixar seu desenvolvimento web muito mais rápido e eficiente com apenas alguns comandos. Com ela, você consegue montar seu projeto completo, com uma interface linda e intuitiva dentro de pouquíssimo tempo. Vamos lá?
&nbsp; 

## Tópicos

- [O que é o FilamentPHP?](#o-que-é-o-filamentphp)  
- [Quais as vantagens de usar FilamentPHP?](#quais-as-vantagens-de-usar-filamentphp)  
- [O que preciso para usar FilamentPHP?](#o-que-preciso-para-usar-filamentphp)  
- [Instalando o Filament](#instalando-o-filament)
- [Demonstração de uso do FilamentPHP na prática ](#demonstração-de-uso-do-filamentphp-na-prática)  
- [Conclusão](#conclusão)  
- [Referências](#referências)  

&nbsp; 

## O que é o FilamentPHP?


![Página principal do FilamentPHP](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/57gokizkbe2v6q6olbde.png)

O [FilamentPHP](https://filamentphp.com/) é uma ferramenta para desenvolvimento web full-stack, também chamada de TALLkit, pois reúne os 4 cavaleiros da TALLStack (Tailwind, Alpine.js, Laravel, Livewire).

Com uma documentação rica e clara, usar os recursos do Filament não tem nenhum segredo, você consegue implementar cada um deles no seu projeto sem muito esforço, sendo assim, um grande aliado da produtividade, tudo isso com uma interface bonita e intuitiva que você pode moldar da forma como preferir.

O Filament na versão atual (v3.2) conta com 8 módulos pra você usar, são eles: Panel Builder, Form Builder, Table Builder, Notifications, Actions, Widgets, Infolist Builder e Core Concepts, cada um deles com suas respectivas funcionalidades.
&nbsp; 

## Quais as vantagens de usar FilamentPHP?

![Página inicial da documentação do FilamentPHP](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o1uzu3f2kyjfpq114ats.png)

**Facilidade:** Usando o FilamentPHP você vê várias linhas de código se tornarem uma só. Você consegue implementar facilmente recursos como filtros e campos de buscas em segundos. Basta um comando e o Filament consegue montar seu formulário prontinho só pra você moldar como quiser.  

**Desacoplamento:** Os módulos do Filament também podem ser utilizados de forma independente, sem a necessidade da instalação de todo seu ecossistema. Então, se você quiser usar só o Form Builder ou o Table Builder, você pode instalá-los sem precisar instalar todo o restante. 

**Produtividade:** Com as várias facilidades que essa ferramenta oferece, o seu desenvolvimento fica muito mais rápido, uma função que você normalmente demoraria umas horas pra fazer pode durar apenas minutos.

**Customizável:** Afinal, quem tem limite é estado, não é mesmo? Apesar de o foco do Filament ser em painéis administrativos, você pode utilizá-lo também para criar sites por exemplo, com ele você é livre pra usar sua imaginação.

**Open-source:** Isso mesmo, lá no Github você pode clonar o repositório do Filament e adicionar sua contribuição. No próprio readme do projeto você encontra orientações de como rodar o projeto na sua máquina.

**Gratuito:** Não podemos esquecer o melhor de tudo né? O FilamentPHP é totalmente gratuito.
&nbsp; 

## O que preciso para usar FilamentPHP?

Para usar FilamentPHP você precisa ter os seguintes requisitos :

- PHP 8.1+
- Laravel v10.0+
- Livewire v3.0+

>Esses requisitos valem para o FilamentPHP v3.2, você pode ver os requisitos para as outras versões visitando a aba de [Instalação](https://filamentphp.com/docs/3.x/panels/installation) lá dentro da documentação. É recomendado o uso da versão mais atual, pois ela veio com muito mais recursos que as anteriores e de forma ainda mais simplificada, porém, se você optar por uma versão mais baixa, saiba que alguns recursos podem não estar presentes ou mudaram a forma de implementação.

Para o desenvolvimento em Filament, é muito importante que você tenha uma boa noção de PHP + Laravel, pois assim além de a ferramenta ser melhor aproveitada, entendendo isso, você pode desacoplar as funcionalidades com mais facilidade, assim usufruindo de todas as vantagens de utilizá-lo.
&nbsp; 

## Instalando o Filament

Para instalar o FilamentPHP, dentro do seu projeto Laravel rode o seguinte comando:

```php
composer require filament/filament:"^3.2" -W 
```

Depois disso, rode o comando a seguir. Este vai instalar o Painel:

```php
php artisan filament:install --panels
```

E por último, para criar seu usuário do painel, utilize o comando:

```php
php artisan make:filament-user
```

E pronto, agora você já pode acessar seu painel Filament, basta rodar um `php artisan serve` e acessar a URL `localhost:8000/admin` e logar com o e-mail e senha do usuário que você criou.
&nbsp; 

## Demonstração de uso do FilamentPHP na prática

{% embed https://www.youtube.com/watch?v=JHx8Z7-qurI %}

No vídeo acima, eu demonstro a criação de uma resource utilizando Filament. A resource já vem com o CRUD completo e funcional, com seu formulário e sua tabela já montados.

### Para criar essa resource eu sigo os seguintes passos:

Primeiro, antes de criar a resource você precisará somente de 3 coisas
 - A sua tabela no banco de dados do seu projeto Laravel deve estar criada. 
 - No seu Model, a sua variavel `$fillable` deve conter todos os campos existentes na sua tabela.
 - E obviamente, ter o FilamentPHP instalado no seu projeto. (Passo a passo no tópico anterior).

Você pode facilmente fazer isso da seguinte forma:

Use o comando abaixo com o nome do Model que você desejar (no caso o nome do meu Model é Product) com a flag `-m` para que a migration já seja criada junto:

```php
php artisan make:model Product -m
```

Na Migration que você acabou de criar, coloque os campos que você desejar adicionar na sua tabela, ela deve ficar mais ou menos assim:

```php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
	/**
	* Run the migrations.
	*/
	public function up(): void 
	{
		Schema::create('products', function (Blueprint $table) {
			$table->id();
			$table->string('name');
			$table->longText('description');
			$table->decimal('price', 8, 2);
			$table->timestamps();
		});
	}
  
	/**
	* Reverse the migrations.
	*/
	public function down(): void 
	{
		Schema::dropIfExists('products');
	}
};
```

Depois de adicionar seus campos, rode um `php artisan migrate` para que seja criada a tabela no seu banco de dados.

Após criada a tabela, declare os campos da sua tabela na variável `$fillable` dentro do seu Model como no exemplo abaixo:

```php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
  
class Product extends Model
{
	use HasFactory;

	protected $fillable = [
		'name',
		'description',
		'price',

	];
}
```

E pronto, agora é só correr pro abraço! Para criar sua resource, você só vai precisar do seguinte comando (onde `Product` é o nome do seu Model):

```php
php artisan make:filament-resource Product --generate --view

// A flag --generate vai gerar seu formulário
// A flag --view vai criar a página de visualização
// Você pode ainda utilizar a flag --simple para que sua 
// resource seja baseada em modais, isso tudo ta explicado 
// direitinho na documentação
```
&nbsp; 

## Conclusão

Você pode ter um gostinho das funcionalidades do FilamentPHP visitando a [demo](https://demo.filamentphp.com/), lá mostra de forma prática um exemplo de como os componentes podem ser utilizados e organizados em tela no seu projeto. O Filament também tem uma comunidade no Discord que está sempre pronta pra te ajudar e tirar suas dúvidas.

Além disso, reza a lenda que a versão 4 vem ainda esse ano com ainda mais novidades.

"Ah mas você ta fazendo propaganda do negócio", acho que o que é bom tem ser mostrado né pessoal.
Eai, vamos pro Filament?

&nbsp; 

## Referências

- [Documentação: FilamentPHP](https://filamentphp.com/docs)   
- [Documentação: Laravel](https://laravel.com/docs/10.x#creating-a-laravel-project)    
- [Comunidade FilamentPHP](https://discord.com/invite/filament)  

&nbsp; 

_Meus agradecimentos a @cherryramatis,@clintonrocha98 e @redrodrigoc pelas dicas e sugestões para este artigo, vocês são demais 💜_