Slug Eloquent yang paham bahasa Indonesia untuk Laravel 6–13, bisa di-eject agar tanpa ketergantungan
caturseptian/laravel-sluggable is a Laravel package for slug eloquent yang paham bahasa indonesia untuk laravel 6–13, bisa di-eject agar tanpa ketergantungan.
It currently has 0 GitHub stars and 9 downloads on Packagist (latest version v1.0.2).
Install it with composer require caturseptian/laravel-sluggable.
Discover more Laravel packages by caturseptian
or browse all Laravel packages to compare alternatives.
Last updated
Membuat slug otomatis saat model Eloquent disimpan, dengan aturan yang paham bahasa Indonesia.
PT Bank Rakyat Indonesia (Persero) Tbk → bank-rakyat-indonesia, Kab. Bandung Barat → kabupaten-bandung-barat.php artisan sluggable:eject, lalu hapus paketnya.composer require caturseptian/laravel-sluggable
Pasang di
require, bukanrequire-dev, kecuali Anda akan melakukan eject. Tanpa eject,composer install --no-devdi production membuat aplikasi galat class not found.
composer require --dev caturseptian/laravel-sluggable
php artisan sluggable:eject --dry-run # lihat file yang akan dibuat/diubah
php artisan sluggable:eject
composer remove caturseptian/laravel-sluggable
Eject menyalin kode ke app/Support/Sluggable (namespace App\Support\Sluggable), mengganti
rujukan Caturseptian\Sluggable di folder app, config, database, routes, dan tests, lalu
menyertakan LICENSE-sluggable. Rujukan di luar folder itu tidak diubah, tetapi ditampilkan sebagai
peringatan. Opsi: --path=, --namespace= (beri tanda kutip, mis. --namespace="Domain\Slug"),
--scan= (bisa berulang), --dry-run, --force.
use Caturseptian\Sluggable\HasSlug;
use Caturseptian\Sluggable\SlugOptions;
use Illuminate\Database\Eloquent\Model;
class Perusahaan extends Model
{
use HasSlug;
public function getSlugOptions(): SlugOptions
{
return SlugOptions::create()
->generateSlugsFrom('nama')
->saveSlugsTo('slug');
}
}
Migrasi: $table->string('slug')->unique();
| Metode | Keterangan |
|---|---|
| generateSlugsFrom('judul') / (['judul', 'kota']) / (function ($model) { ... }) | sumber slug |
| saveSlugsTo('slug') | kolom tujuan |
| allowDuplicateSlugs() | tanpa suffix keunikan |
| slugsShouldBeNoLongerThan(100) | panjang maksimum (default 250, termasuk suffix) |
| usingSeparator('_') | pemisah (default -) |
| usingLanguage('de') | bahasa transliterasi Str::slug (default en) |
| doNotGenerateSlugsOnCreate() / doNotGenerateSlugsOnUpdate() | matikan pada event tertentu |
| preventOverwrite() | jangan pernah membuat ulang slug yang sudah terisi (slug manual tidak dicek keunikannya) |
| skipGenerateWhen(function ($model) { return ...; }) | lewati kondisi tertentu |
| extraScope(function ($query) { $query->where('tenant_id', 1); }) | keunikan per lingkup |
| startSlugSuffixFrom(2) | suffix pertama (default 1) |
| indonesian() / indonesian(function ($rules) { ... }) | aturan Indonesia |
SlugOptions::create()
->generateSlugsFrom('nama')
->saveSlugsTo('slug')
->indonesian(function ($rules) {
return $rules
->expandAbbreviations() // Kab. → kabupaten, Jl. → jalan, No. → nomor, ...
->dropLegalEntity() // PT, CV, UD, Tbk, (Persero), Koperasi, Yayasan, ...
->dropStopwords(); // dan, di, ke, dari, yang, untuk, ...
});
indonesian() tanpa argumen hanya memperluas singkatan. Bila aturan menghapus seluruh teks
(mis. nama hanya PT), slug dibuat dari teks asli (pt).
| Masukan | Aturan | Slug |
|---|---|---|
| PT Bank Rakyat Indonesia (Persero) Tbk | dropLegalEntity | bank-rakyat-indonesia |
| Kab. Bandung Barat | expandAbbreviations | kabupaten-bandung-barat |
| Jl. Gatot Subroto No. 10 | expandAbbreviations | jalan-gatot-subroto-nomor-10 |
| Toko Buku dan Alat Tulis | dropStopwords | toko-buku-alat-tulis |
Daftar lengkap ada di src/Indonesian/Dictionary.php.
use Caturseptian\Sluggable\Slug;
Slug::make('Judul Artikel'); // judul-artikel
Slug::indonesia('Kab. Bandung Barat'); // kabupaten-bandung-barat
Slug tidak memeriksa database, jadi tidak menjamin keunikan.
| Laravel | PHP | |---|---| | 6, 7 | 7.2 / 7.3 – 8.0 | | 8 | 7.3 – 8.1 | | 9 | 8.0 – 8.2 | | 10 | 8.1 – 8.3 | | 11, 12 | 8.2 – 8.4 | | 13 | 8.3 – 8.5 |
Setiap baris diuji di CI.
Nama metode SlugOptions sama. Ganti use Spatie\Sluggable\... menjadi
use Caturseptian\Sluggable\.... Fitur Spatie v4 seperti URL self-healing, slug
multibahasa (HasTranslatableSlug), dan atribut #[Sluggable] tidak tersedia di sini —
bila Anda membutuhkannya, pakai spatie/laravel-sluggable.
composer test
Berawal dari spatie/laravel-sluggable karya Freek Van der Herten dan Spatie. Dikembangkan dan dirawat oleh Tian.
MIT. Lihat LICENSE.md.