waad/laravel-dynamic-observer

Call observer of the model without requiring in any provider, support multi observers

v1.0.0 2023-06-05 19:41 UTC

This package is not auto-updated.

Last update: 2024-11-19 11:17:50 UTC


README

Call observer of the model from the direct model by trait HasObserver without requiring any provider, support multi observers.

🤞Installation

Require this package with composer using the following command:

composer require waad/laravel-dynamic-observer

 

💯 Usage

To properly use this package, follow the steps that meet your needs

  • will connect dynamically with an observer named WorksObserver in App\Observers namespace
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Waad\Observer\HasObserver;

class Work extends Model
{
    use HasObserver;


    ......
}

 

  • if using observer different name class use $observer property
<?php

namespace App\Models;

use App\Observers\MyWorkObserver;
use Illuminate\Database\Eloquent\Model;
use Waad\Observer\HasObserver;

class Work extends Model
{
    use HasObserver;

    public static $observer = MyWorkObserver::class;
}

 

  • if using multi observer different names classes used $observer property
<?php

namespace App\Models;

use App\Observers\MyWorkObserver;
use App\Observers\OurWorkObserver;
use Illuminate\Database\Eloquent\Model;
use Waad\Observer\HasObserver;

class Work extends Model
{
    use HasObserver;

    public static $observer = [MyWorkObserver::class, OurWorkObserver::class];
}

 

🍔 Example Obsever

  • to create an observer use this command
php artisan make:observer YourModelObserver --model=YourModel

⚠️ Such a file will be generated, If there is a shortage of functions, take copies of this example

<?php

namespace App\Observers;

use App\Models\Work;

class WorkObserver
{
    
    public function creating(Work $work)
    {
        // This function is called when a new model instance is being created.
        $work->title = $work->title . ".....";
    }

    public function created(Work $work)
    {
        // This function is called after a new model instance is successfully 
        // created and saved to the database.

        $work->users()->attach([1,2]);
    }

    public function updating(Work $work)
    {
        // This function is called when an existing model instance is being updated.

        $work->status_color = $work->status ? 'green' : 'red';
    }

    public function updated(Work $work)
    {
        // This function is called after an existing model instance is successfully 
        // updated and saved to the database.

        $work->users()->sync([1,3]);
    }

    public function saving(Work $work)
    {
        // This function is called when a model instance is being saved
        // (either created or updated).

        $work->title = $work->title . ".....";
    }

    public function saved(Work $work)
    {
        // This function is called after a model instance is successfully saved 
        // (either created or updated).

        $work->status_string = 'working';
        $work->save();
    }

    public function deleting(Work $work)
    {
        // This function is called when an existing model instance is being deleted.

        $work->users()->detach();
    }

    public function deleted(Work $work)
    {
        // This function is called after an existing model instance is successfully deleted 
    }

    public function restoring(Work $work)
    {
        // This function is called when a "soft-deleted" model instance is being restored.
    }

    public function restored(Work $work)
    {
        // This function is called after a "soft-deleted" model instance is successfully restored.
    }

    public function retrieved(Work $work)
    {
        // This function is called after a model instance is retrieved from the database.

        $work->increment('views');
    }
}

 

🚀 About Me

I'm a Back End developer...

 

⚖️ License

MIT