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
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:
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:
You might also like :
- Read Also: How To Create Zip File Using Ziparchive in Laravel
- Read Also: How to Deploy Laravel on Heroku with Database
- Read Also: How To Create Dynamic Linechart In Laravel
- Read Also: How To Validate URL In PHP With Regex