Skip to content

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

License

Notifications You must be signed in to change notification settings

waadmawlood/laravel-dynamic-observer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

🎀 Laravel Dynamic Observer

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

About

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

Resources

License

Stars

Watchers

Forks

Languages