Laravel Eloquent Sluggable is a package that simplifies the creation and management of slugs for Eloquent models in Laravel applications. A slug is a URL-friendly version of a string, often used in URLs to identify resources in a readable way.
Key Features of Laravel Eloquent Sluggable:
- Automatic Slug Generation: Automatically generates slugs from a specified field in your model (e.g., titles).
- Customizable Slug Format: Customize the format of the slug to fit your needs.
- Unique Slugs: Ensure that generated slugs are unique, avoiding conflicts with existing entries.
- Slug Updates: Automatically update slugs when the original field is modified.
- Integration with Eloquent: Seamlessly integrates with Laravel’s Eloquent ORM.
Installation
To get started with Laravel Eloquent Sluggable, follow these steps:
- Require the Package: Install the package via Composer:
1composer require spatie/eloquent-sluggable - Publish the Configuration (optional): You can publish the configuration file using:
1php artisan vendor:publish --provider="Spatie\EloquentSluggable\ServiceProvider" - Setup the Model: You need to set up your model to use the Sluggable trait. For example, if you have a
Post
model:
123456789101112131415161718192021namespace App\Models;use Illuminate\Database\Eloquent\Model;use Spatie\Sluggable\Sluggable;use Spatie\Sluggable\SlugOptions;class Post extends Model{use Sluggable;protected $fillable = ['title', 'content'];public function getSlugOptions() : SlugOptions{return SlugOptions::create()->generateSlugsFrom('title') // Field to generate slug from->saveSlugsTo('slug') // Field to save the slug->usingLanguage('en') // Set language for slug->slugsShouldBeUnique(); // Ensure slugs are unique}}
Database Migration
Ensure your database migration includes a slug
column in your model’s table. For example, for the posts
table:
1 2 3 4 5 6 7 |
Schema::create('posts', function (Blueprint $table) { $table->id(); $table->string('title'); $table->string('slug')->unique(); $table->text('content'); $table->timestamps(); }); |
Using the Model
Now that the model is set up, you can create a new post, and a slug will be generated automatically based on the title.
- Creating a Post: When you create a new post, the slug will be generated from the title:
123456$post = Post::create(['title' => 'My First Post','content' => 'This is the content of my first post.',]);// The slug will be automatically generated and saved. - Updating the Post: If you update the title, the slug will automatically update if you configure it to do so:
1234$post->title = 'My Updated First Post';$post->save();// The slug will be updated automatically.
Custom Slug Format
You can customize the slug format by chaining additional methods in the getSlugOptions
method. For example, if you want to add a timestamp to the slug:
1 2 3 4 5 6 7 8 9 10 11 |
public function getSlugOptions() : SlugOptions { return SlugOptions::create() ->generateSlugsFrom('title') ->saveSlugsTo('slug') ->usingLanguage('en') ->slugsShouldBeUnique() ->appendSlug('{slug}-{timestamp}', function () { return now()->timestamp; }); } |
Conclusion
Laravel Eloquent Sluggable makes managing slugs in your Laravel applications straightforward. By automating the generation and management of slugs, it helps you maintain clean, user-friendly URLs.
Additional Considerations
- Documentation: For more detailed information, advanced features, and configuration options, refer to the official Spatie Eloquent Sluggable documentation.
- Handling Duplicates: The package can automatically handle slug conflicts by appending a unique suffix (e.g.,
my-post-1
,my-post-2
) if configured.
- Laravel Breeze – Simple authentication starter kit
- Laravel Jetstream – Scaffolding for Laravel apps
- Laravel Passport – API authentication via OAuth2
- Laravel Sanctum – Simple API authentication
- Spatie Laravel Permission – Role and permission management
- Laravel Cashier – Subscription billing with Stripe
- Laravel Scout – Full-text search using Algolia
- Laravel Socialite – OAuth authentication (Google, Facebook, etc.)
- Laravel Excel – Excel import and export for Laravel
- Laravel Horizon – Redis queues monitoring
- Laravel Nova – Admin panel for Laravel
- Laravel Fortify – Backend authentication for Laravel
- Laravel Vapor – Serverless deployment on AWS
- Laravel Telescope – Debugging assistant for Laravel
- Laravel Dusk – Browser testing
- Laravel Mix – API for compiling assets
- Spatie Laravel Backup – Backup management
- Laravel Livewire – Building dynamic UIs
- Spatie Laravel Media Library – Manage media uploads
- Laravel Excel – Excel spreadsheet handling
- Laravel Debugbar – Debug tool for Laravel
- Laravel WebSockets – Real-time communication
- Spatie Laravel Sitemap – Generate sitemaps
- Laravel Spark – SaaS scaffolding
- Laravel Envoy – Task runner for deployment
- Spatie Laravel Translatable – Multilingual model support
- Laravel Backpack – Admin panel
- Laravel AdminLTE – Admin interface template
- Laravel Collective Forms & HTML – Simplified form and HTML generation
- Spatie Laravel Analytics – Google Analytics integration
- Laravel Eloquent Sluggable – Automatically create slugs
- Laravel Charts – Chart integration
- Laravel Auditing – Track changes in models
- Laravel JWT Auth – JSON Web Token authentication
- Laravel Queue Monitor – Monitor job queues
- Spatie Laravel Query Builder – Filter, sort, and include relationships in Eloquent queries
- Laravel Datatables – jQuery Datatables API
- Laravel Localization – Multilingual support for views and routes
- Laravel Acl Manager – Access control list manager
- Laravel Activity Log – Record activity in your app
- Laravel Roles – Role-based access control
- Spatie Laravel Tags – Tagging models
- Laravel Installer – CLI installer for Laravel
- Laravel Breadcrumbs – Generate breadcrumbs in Laravel
- Laravel Mailgun – Mailgun integration for Laravel
- Laravel Trustup Model History – Store model change history
- Laravel Deployer – Deployment automation tool
- Laravel Auth – Custom authentication guards
- Laravel CORS – Cross-Origin Resource Sharing (CORS) support
- Laravel Notifications – Send notifications through multiple channels
- Spatie Laravel Http Logger – Log HTTP requests
- Laravel Permission Manager – Manage permissions easily
- Laravel Stubs – Customize default stubs in Laravel
- Laravel Fast Excel – Speed up Excel exports
- Laravel Image – Image processing
- Spatie Laravel Backup Server – Centralize backups for Laravel apps
- Laravel Forge API – Manage servers through the Forge API
- Laravel Blade SVG – Use SVGs in Blade templates
- Laravel Ban – Ban/unban users from your application
- Laravel API Response – Standardize API responses
- Laravel SEO – Manage SEO meta tags
- Laravel Settings – Store and retrieve settings
- Laravel DOMPDF – Generate PDFs
- Laravel Turbo – Full-stack framework for building modern web apps
- Spatie Laravel Event Sourcing – Event sourcing implementation
- Laravel Jetstream Inertia – Jetstream’s Inertia.js integration
- Laravel Envoy Tasks – Task automation
- Laravel Likeable – Like/dislike functionality
- Laravel GeoIP – Determine visitor’s geographic location
- Laravel Country State City – Dropdowns for country, state, and city
- Laravel Hashids – Generate short unique hashes
- Laravel Repository – Repository pattern for Laravel
- Laravel UUID – UUID generation for models
- Spatie Laravel Medialibrary Pro – Enhanced media management
- Laravel Queue Monitor – Monitor Laravel job queues
- Laravel User Activity – Monitor user activity
- Laravel DB Snapshots – Create database snapshots
- Laravel Twilio – Twilio integration
- Laravel Roles – Role-based permission handling
- Laravel Translatable – Add translations to Eloquent models
- Laravel Teamwork – Manage teams in multi-tenant apps
- Laravel Full Text Search – Add full-text search to Laravel models
- Laravel File Manager – File and media management
- Laravel User Timezones – Automatically detect user time zones
- Laravel ChartsJS – Render charts with ChartsJS
- Laravel Stripe – Stripe API integration
- Laravel PDF Generator – PDF generation
- Laravel Elasticsearch – Elasticsearch integration
- Laravel Simple Qrcode – Generate QR codes
- Laravel Timezone – Manage timezones and conversions
- Laravel Collective API – API management for Laravel
- Laravel Rest API Boilerplate – REST API starter kit
- Laravel Multi Auth – Multi-authentication functionality
- Laravel Voyager – Admin panel for Laravel
- Laravel Voyager Database – Database manager for Voyager
- Laravel Categories – Handle categories for models
- Laravel Multitenancy – Multi-tenancy implementation
- Laravel Access Control – Advanced access control for users
- Laravel Menus – Menu management
- Laravel Translatable Routes – Multilingual route handling