escapework/laravel-steroids

Steroids for Laravel 5.

0.7.0 2017-10-03 14:53 UTC

README

Build Status Latest Stable Version Total Downloads MIT Licence

Just some goodies for making your Laravel Project even better.

Version Compatibility

Laravel Laravel on Steroids
5.5.x - 5.6.x 0.7.x@dev
5.4.x 0.6.x
5.3.x 0.5.x
5.2.x 0.4.x
5.1.x 0.3.x

Installation

$ composer require escapework/laravel-steroids:"0.7.*"

Usage

We offer a lot of base classes and helpers. Take a look.

First of all, your models now need to extend your base model.

use EscapeWork\LaravelSteroids\Model;

class Product extends Model
{
}

Presenters

Just add a Presentable in your model:

use EscapeWork\LaravelSteroids\Presentable;

class Product extends Model
{
    use Presentable;

    protected $presenter = 'App\Presenters\ProductPresenter';
}

And create your presenter:

use EscapeWork\LaravelSteroids\Presenter;

class ProductPresenter extends Presenter
{
    public function title()
    {
        // $this->model gives you access to your model inside the presenter
        return ucwords($this->model->title);
    }
}

Then, you can just call the presenter methods like this:

$product = Product::find(1);
echo $product->present->title;

Sluggable

Want to make slugs with your model? Just add the Sluggable to your model.

use EscapeWork\LaravelSteroids\Sluggable;

class Product extends Model
{
    use Sluggable;
}

By default, when your model is created/updated, Sluggable will take your $title attribute, create a unique slug and put the value in the $slug attribute. If you want to change the field that is used to create the slug, just put a $sluggableAttr property on your model. And if you want to change the slug field, add the $sluggableField property.

class User extends Model
{
    use Sluggable;
    protected $sluggableAttr  = 'name';
    protected $sluggableField = 'username';
}

If you don't want the slug to be updated when your model is updated, set the $makeSlugOnUpdate property to false;

Cacheable

Cacheable is a model trait that clean up some cache keys when your model is changed/deleted. To use it, just add the Cacheable trait on your model:

use EscapeWork\LaravelSteroids\Cacheable;

class Product extends Model
{
    use Cacheable;

    protected $cacheable = [
        // here you need to put your cache keys that need to be cleared
        'products.actives',
        'products.all',

        // you can also use some attribute to be replaced
        // in this case, the {category_id} will be replaced with $product->category_id,
        'products.category.{category_id}'
    ];
}

Sortable

Do you want to sort your models automatically? Easy.

use EscapeWork\LaravelSteroids\Sortable;

class Banner extends Model
{
    use Sortable;
}

Then:

Banner::create(['title' => 'First Banner'])->order;  // 1
Banner::create(['title' => 'Second Banner'])->order; // 2

If you order field is not called order, you just need to specify:

protected $sortable = [
    'field' => 'order',
];

Ordenable

Want to easily change the orderBy in your query? Easy.

use EscapeWork\LaravelSteroids\Ordenable;

class Product extends Model
{
    use Ordenable;

    protected $ordenables = [
        'price',
        'hits'
    ];

    protected $ordenableDefault = [
        'field'     => 'created_at',
        'direction' => 'desc',
    ];
}

Then, when querying:

$products = Product::where(...)->order('price', 'desc')->get();

If you try to order for a field that is not in the $ordenables array, your results will be sorted with the $ordenableDefault values.

License

See the License file.