martinbean/laravel-sluggable-trait

A trait you can apply to Eloquent models to have slugs automatically generated on save.
49,086 24
Install
composer require martinbean/laravel-sluggable-trait
Latest Version:0.4.0
License:MIT
Last Updated:May 3, 2022
Links: GitHub  ·  Packagist
Maintainer: martinbean

Laravel Sluggable Trait

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

Installation

composer require martinbean/laravel-sluggable-trait

Usage

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use MartinBean\Database\Eloquent\Sluggable;

class Item extends Model
{
    use Sluggable;
}

By default, the trait assumes your database has two columns: name and slug. If you need to change these, you can override the getter methods:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use MartinBean\Database\Eloquent\Sluggable;

class Item extends Model
{
    use Sluggable;

    protected function getSlugColumnName()
    {
        return 'seo_title';
    }

    protected function getSluggableString()
    {
        return 'headline';
    }
}

Note: The visibility of these methods changed from public to protected in version 0.4.0 of this package.

The getSlugColumnName() method should return the name of the column you want to store slugs in your database table.

The getSluggableString() should return a string you want to create a slug from. This is exposed as a method and not a property or constantly as you may want to create a slug from the value of one than one column. For example:

/**
 * Create a string based on the first and last name of a person.
 */
protected function getSluggableString()
{
    return sprintf('%s %s', $this->first_name, $this->last_name);
}
/**
 * Create a string based on a formatted address string.
 */
protected function getSluggableString()
{
    return implode(', ', array_filter([
        $this->street_address,
        $this->locality,
        $this->region,
        $this->postal_code,
        $this->country,
    ]));
}

Configuration

By default, the package will use dashes as word separators in slugs, i.e. this-is-your-slug. The separator character can be changed by publishing the package’s configuration file and specifying your own separator character.

php artisan vendor:publish --tag=sluggable-config

You can then change the separator value to something like an underscore in the published config/sluggable.php file:

<?php
// config/sluggable.php

return [

    'separator' => '_',

];

Note: Changing the slug separator won’t change any existing slugs in your database. You’ll need to update those manually if you change the separator.

License

Licensed under the MIT Licence.

Related Packages

wildside/userstamps

Laravel Userstamps provides an Eloquent trait which automatically maintains `cre...

2,157,838 753
cariuk/repository-pattern-laravel

A flexible and powerful Laravel package implementing the Repository Pattern with...

2,960 0
mybizna/automigrator

Declare database migrations and factory definitions inside Laravel models.

1,384 3
kolossal-io/laravel-multiplex

A Laravel package to attach versioned meta data to Eloquent models.

129,032 292
alibayat/laravel-categorizable

Implementing Nested-structure Hierarchy Categories system for Eloquent models.

2,746 60

Version History

Version Released PHP Laravel License
0.4.0 >=5.0 MIT
0.3.0 >=5.4.0 >=4.0 MIT
0.2.0 >=5.4.0 >=4.0 MIT