Laravel 5 - Eventos do Eloquent Artigo

Conheça os cursos gratuitos do WebDevBr! - Inscreva-se!


Este artigo foi publicado a 2 anos, 4 meses, 3 semanas, 1 dia atrás.

Eventos são métodos (functions) que disparam automaticamente sempre que uma determinada ação é executada no seu banco de dados, imagine que você precisa fazer algo sempre que criar um novo registro, por exemplo, sempre que criar um novo usuário você quer criar um novo diretório para arquivos desta pessoa, vamos ver na prática.

Entendendo o ciclo

Os eventos disponíveis são estes listados a seguir, nem precisava explicar muito, mas vou faze-lo assim mesmo:

  • creating - Antes de um registro ser criado
  • created - Depois de um registro ser criado
  • updating- Antes de um registro ser atualizado
  • updated - Depois de um registro ser atualizado
  • saving - Antes de um registro ser atualizado ou criado
  • saved - Depois de um registro ser atualizado ou criado
  • deleting - Antes de um registro ser removido
  • deleted - Depois de um registro ser removido
  • restoring - Antes de um registro ser restaurado
  • restored - Depois de um registro ser restaurado

Imagine que estamos registrando aquele usuário do exemplo que dei no início e que terá o diretório criado, quando eu clicar em salvar (para incluir os dados no banco) o evento creating será chamado e depois disse ser feito o created entra em ação, o evento updating não faz nada, afinal ele só funciona quando algo é atualizado, mas o saving e saved funcionam nos dois casos (criar e atualizar), é simples na verdade.

Gostou deste artigo?

Receba atualizações semanais com novos artigos do WebDevBr e outras dicas!

Eventos do Laravel na prática

Vou declarar aqui um Service Provider que vai "ouvir" sempre que o Eloquent fizer algo.

<?php
namespace App\Providers;

use App\User;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Inicia qualquer serviço da aplicação.
     * retirado direto da documentação
     * 
     * @return void
     */
    public function boot()
    {
        User::created(function ($user) {
            $dir = new \WebDevBr\Files\Directory;
            $dir->setPath(public_path().'/user/'.$user->id);
            $dir->create();
        });
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

Ou sou do tipo que sempre cria objetos e libraries (leia-se, componentes) sempre que vou fazer algo que eu posso vir a usar novamente, neste caso escrevi o objeto WebDevBr\Files\Directory() que gerencia diretórios pra mim, não importa a implementação deste cara, só que ele sabe criar e remover diretórios.

Posso melhorar ainda mais e sumir com este diretório quando o usuário for removido.

<?php
namespace App\Providers;

use App\User;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Inicia qualquer serviço da aplicação.
     *
     * @return void
     */
    public function boot()
    {
        User::created(function ($user) {
            $dir = new \WebDevBr\Files\Directory;
            $dir->setPath(public_path().'/user/'.$user->id);
            $dir->create();
        });

        User::deleted(function ($user) {
            $dir = new \WebDevBr\Files\Directory;
            $dir->setPath(public_path().'/user/'.$user->id);
            $dir->remove();
        });
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

Existem muitas coisas que podem ser feitas usando os eventos do Laravel 5, este foi apenas um exemplo, apenas tome cuidado, com muitos eventos o seu código pode se tornar um pesadelo rapidamente, tente criar objetos e métodos mais específicos possíveis.

Espero que tenham gostado da dica!


Cursos relacionados


* Parcelamento apenas cartão de crédito! Pode haver uma pequena variação no parcelamento em relação a simulações apresentadas!