LaravelPackages.net
Acme Inc.
Toggle sidebar
caturseptian/laravel-sluggable

Slug Eloquent yang paham bahasa Indonesia untuk Laravel 6–13, bisa di-eject agar tanpa ketergantungan

9
0
v1.0.2
About caturseptian/laravel-sluggable

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

Laravel Sluggable

tests Packagist Version Packagist Downloads PHP Laravel License Ko-fi Trakteer

English

Membuat slug otomatis saat model Eloquent disimpan, dengan aturan yang paham bahasa Indonesia.

  • Paham Indonesia — PT Bank Rakyat Indonesia (Persero) Tbk → bank-rakyat-indonesia, Kab. Bandung Barat → kabupaten-bandung-barat.
  • Laravel 6 sampai 13 dalam satu paket (PHP 7.2–8.5).
  • Bisa tanpa ketergantungan — pasang saat pengembangan, php artisan sluggable:eject, lalu hapus paketnya.

Instalasi

Mode dependent (paket tetap dipasang)

composer require caturseptian/laravel-sluggable

Pasang di require, bukan require-dev, kecuali Anda akan melakukan eject. Tanpa eject, composer install --no-dev di production membuat aplikasi galat class not found.

Mode eject (tanpa ketergantungan)

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.

Pemakaian

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();

Opsi

| 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 |

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.

Di luar model

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.

Kompatibilitas

| 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.

Pindah dari spatie/laravel-sluggable

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.

Pengujian

composer test

Kredit

Berawal dari spatie/laravel-sluggable karya Freek Van der Herten dan Spatie. Dikembangkan dan dirawat oleh Tian.

Lisensi

MIT. Lihat LICENSE.md.

Comments