New

Just launched: Vueblocks, a brand-new search engine for Vue packages! Explore Vueblocks →

ortic/hookable

Laravel Eloquent hooks system.
20,429
Install
composer require ortic/hookable
Latest Version:v5.4
PHP:>=5.5.9
Laravel:5
License:MIT
Last Updated:Oct 31, 2026
Links: GitHub  ·  Packagist
Maintainer: Remo

Sofa/Hookable

Build Status stable Downloads

Hooks system for the Eloquent ORM (Laravel 5.2).

Hooks are available for the following methods:

  • Model::getAttribute
  • Model::setAttribute
  • Model::save
  • Model::toArray
  • Model::replicate
  • Model::isDirty
  • Model::__isset
  • Model::__unset

and all methods available on the Illuminate\Database\Eloquent\Builder class.

Installation

Clone the repo or pull as composer dependency:

composer require sofa/hookable:~5.2

Usage

In order to register a hook you use static method hook on the model: example.

Important Due to the fact that PHP will not let you bind a Closure to your model's instance if it is created in a static context (for example model's boot method), you need to hack it a little bit, in that the closure is created in an object context.

For example see the above example along with the class that encloses our closures in an instance scope that is being used there.

Signature for the hook closure is following:

function (Closure $next, mixed $payload, Sofa\Hookable\Contracts\ArgumentBag $args)

Hooks are resolved via Sofa\Hookable\Pipeline in the same order they were registered (except for setAttribute where the order is reversed), and each is called unless you return early:

// example hook on getAttribute method:
function ($next, $value, $args)
{
    if (/* your condition */) {
        // return early
        return 'some value'; // or the $value
    }

    else if (/* other condition */) {
        // you may want to mutate the value
        $value = strtolower($value);
    }

    // finally continue calling other hooks
    return $next($value, $args);
}

Contribution

All contributions are welcome, PRs must be tested and PSR-2 compliant.

Related Packages

sofa/hookable

Laravel Eloquent hooks system.

2,050,959 65
volosyuk/simple-eloquent

Adaptation of eloquent for retrieving its attributes

117,926 55
gzero/eloquent-tree

Eloquent Tree is a tree model for Laravel Eloquent ORM.

59,533 131
martinbean/laravel-sluggable-trait

A trait you can apply to Eloquent models to have slugs automatically generated o...

49,144 24
isswp101/elasticsearch-eloquent

Elasticsearch functionality like Laravel Eloquent models.

25,593 112

Version History

Version Released PHP Laravel License
v5.4 >=5.5.9 5.3.*||5.4.* MIT
V5.3.1 >=5.6.4 5.3.* MIT
v5.3 >=5.6.4 5.3.* MIT
v5.2 >=5.5.9 5.2.* MIT
v5.1.1 >=5.5.9 5.1.* MIT