martinbean/laravel-sluggable-trait

A trait you can apply to Eloquent models to have slugs automatically generated on save.
48,946 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

kodeine/laravel-acl

Light-weight role-based permissions for Laravel 5 built in Auth system.

363,834 774
hootlex/laravel-friendships

This package gives Eloquent models the ability to manage their friendships.

124,561 698
spatie/laravel-sluggable

Generate slugs when saving Eloquent models

14,245,061 1,555
mpociot/laravel-firebase-sync

Synchronize your Eloquent models with a Firebase realtime database.

153,387 265