Observers
Comprar curso

134. Observers

En este capítulo, descubre cómo utilizar Observers en Laravel 10. Aprende cómo utilizar Observers para realizar acciones en la base de datos cuando se realizan cambios en tus modelos.


3 comentarios

Inicia sesión para comentar

Comentarios:

  • Victor Arana Flores

    Victor Arana Flores hace 1 año Destacado

    Para crear un Observer en Laravel 11, puedes utilizar el comando php artisan make:observer seguido del nombre de tu Observer y el nombre del modelo al que se asociará. Por ejemplo, si quisieras crear un Observer para el modelo Post, podrías utilizar el siguiente comando:

    php artisan make:observer PostObserver

    Una vez que se ha creado el Observer, se puede agregar la lógica específica en los métodos que se corresponden con los eventos que deseas escuchar. Por ejemplo, el método created se ejecutará cuando se cree un nuevo registro en el modelo.

    Para asociar el Observer con el modelo correspondiente. Para hacer eso debemos dirigirnos al modelo y hacer lo siguiente.

    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Attributes\ObservedBy;
    use Illuminate\Database\Eloquent\Model;
    
    #[ObservedBy([PostObserver::class])]
    class Course extends Model
    {
    
    }

    Con esta configuración, el Observer PostObserver escuchará los eventos que se produzcan en el modelo Post y ejecutará la lógica correspondiente en los métodos correspondientes.

    En resumen, los Observers son una herramienta útil para realizar acciones en la base de datos cuando se realizan cambios en tus modelos, y Laravel 11 hace que sea fácil crear y registrar Observers en tu aplicación.

  • Leandro Correa

    Leandro Correa hace 4 semanas

    hola tengo esta vercion de Laravel Framework 11.38.2 y en provider no se encuentra el archivo EventServiceProvider lo tengo q crear manualmente? 

    • Victor Arana Flores hace 4 semanas

      Hola Leandro, en laravel 11 puedes registrarlo en el AppServiceProvider, además se puede registrar los observers tambien de esta forma:

      use App\Observers\UserObserver;
      use Illuminate\Database\Eloquent\Attributes\ObservedBy;
       
      #[ObservedBy([UserObserver::class])]
      class User extends Authenticatable
      {
          //
      }
    • Victor Arana Flores hace 4 semanas

      En el primer trimestre de este año saldrá una nueva versión de Laravel (la versión 12) y ahi haré una actualización con todos los cambios que han ocurrido 

    • Leandro Correa hace 4 semanas

      gracias

  • Jesús M.m

    Jesús M.m hace 1 año

    Hola Victor, no entiendo porqué pero me sigue arrojando el error:

    "InvalidArgumentException

    PHP 8.1.0 laravel 10.2.0

    Unable to find observer: app\Observers\PostObserver"

     

     

     

    EventServiceProvider.php

    namespace App\Providers;


     

    use Illuminate\Auth\Events\Registered;

    use Illuminate\Auth\Listeners\SendEmailVerificationNotification;

    use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

    use Illuminate\Support\Facades\Event;


     

    class EventServiceProvider extends ServiceProvider

    {

        /**

         * The event to listener mappings for the application.

         *

         * @var array<class-string, array<int, class-string>>

         */

        protected $listen = [

            Registered::class => [

                SendEmailVerificationNotification::class,

            ],

        ];


     

        /**

         * Register any events for your application.

         */

        public function boot()

        {

            \App\Models\Post::observe(\app\Observers\PostObserver::class);

        }



    PostObserver.php

    namespace App\Observers;


     

    use App\Models\Post;

    use Illuminate\Support\Str;


     

    class PostObserver

    {

        public function creating(Post $post)

        {

            $post->slug = Str::slug($post->title);

            $post->user_id = auth()->id();

        }

    • Victor Arana Flores hace 1 año

      El namespace le has dado App\Observers pero cuando haces referencia a el lo haces como app\Observers

    • Jesús M.m hace 1 año

      Oh, que distingue entre mayúsculas también… Muchas gracias!