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







Follow us
facebooklogo github instagram twitter