How To Create Unique Slug In Laravel 9

Websolutionstuff | Sep-27-2022 | Categories : Laravel

In this article, we will see how to create a unique slug in laravel 9. A slug is the part of a URL that identifies a particular page on a website in an easy-to-read form. a slug can be very powerful for keyword SEO. A good slug can improve a user’s experience if it clearly states what the webpage is about. So, we will generate a unique slug in laravel 9.

In this example, we will create a slug based on the title. For example, if the user enters a title like the laravel 9 slug generator example then the slug can be automatically created or generated like the laravel-9-slug-generator-example.

Also, you can create a slug using the laravel Str::slug() helper function and slug() method.

So, let's see laravel 9 create a unique slug or create a unique slug in PHP.

app/Models/Post.php

<?php

namespace App\Models;

use Illuminate\Support\Str;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;

class Post extends Model
{
    use HasFactory;

    protected $fillable = [
        'title', 'detail', 'slug'
    ];

    /**
     * Boot the model.
     */
    protected static function boot()
    {
        parent::boot();

        static::created(function ($post) {
            $post->slug = $post->createSlug($post->title);
            $post->save();
        });
    }

    /** 
     * create slug
     *
     * @return response()
     */
    private function createSlug($title)
    {
        if (static::whereSlug($slug = Str::slug($title))->exists()) {
            $max = static::whereTitle($title)->latest('id')->skip(1)->value('slug');

            if (is_numeric($max[-1])) {
                return preg_replace_callback('/(\d+)$/', function ($mathces) {
                    return $mathces[1] + 1;
                }, $max);
            }

            return "{$slug}-2";
        }

        return $slug;
    }
}

 

 

app/Http/Controllers/PostController

<?php

namespace App\Http\Controllers;

use App\Models\Post;
use Illuminate\Http\Request;

class PostController extends Controller
{
    /**
     * create a new post
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $post = Post::create([
            "title" => "Laravel Slug Create"
        ]);

        dd($post);
    }
}

Output:

laravel-slug-create

laravel-slug-create-1

laravel-slug-create-2

 

Create Slug using Str::slug()

The Str::slug method generates a URL friendly "slug" from the given string.

use Illuminate\Support\Str;
 
$slug = Str::slug('Laravel 9 Slug Helper Function', '-');

Output:

laravel-9-slug-helper-function

 

 

Generate Slug using slug() Method

The slug method generates a URL friendly "slug" from the given string.

use Illuminate\Support\Str;
 
$slug = Str::of('Laravel 9 Slug Method Example')->slug('-');

Output:

laravel-9-slug-method-example

 


You might also like :

Recommended Post
Featured Post
Laravel 10 Change Column Name And Type In Migration
Laravel 10 Change Column Name...

In this article, we will see laravel 10 change column names and data types in migration. Here, we will learn about...

Read More

Apr-19-2023

Laravel 11 Livewire Dependent Dropdown
Laravel 11 Livewire Dependent...

Hello, laravel web developers! In this article, we'll see how to create a dependent dropdown in laravel 11 Livewire....

Read More

Jun-03-2024

How To Check Occupied Disk Space In Laravel
How To Check Occupied Disk Spa...

Many times we need requirements to check the occupied disk space of the server on the admin side and we are checking man...

Read More

Jul-29-2020

Send Mail Example In Laravel 8
Send Mail Example In Laravel 8

In this article, we will see send mail in laravel 8. here we will see how to send mail in laravel 8. Emai...

Read More

Oct-16-2020