Cara Membuat Slug di Laravel

wahyunanangwidodo

wahyunanangwidodo Senin, 07 Juni 2021

Cara Membuat Slug di Laravel

Kita bisa gunakan metode Str::slug untuk menghasilkan atau merubah string yang kita tentukan menjadi bentuk slug:

$slug = Str::slug('Cara Membuat Slug di Laravel', '-');

// cara-membuat-slug-di-laravel

Kita juga perlu menyediakan kolom khusus untuk menyimpan slug yang dibuat yang akan dipanggil saat melakukan query untuk dijadikan sebagai parameter.

Untuk melihat contoh dan cara penggunaan, mari kita coba membuat slug dengan penerapan pada metode insert data serta membuat form input.

Instalasi Laravel, Database, Model, dan Tabel

Mari kita gunakan aplikasi laravel baru.

laravel new laravel-slug

Silahkan buat MySQL database baru dan hubungkan dengan aplikasi.

//env
DB_DATABASE=laravel_slug
DB_USERNAME=root
DB_PASSWORD=

Selanjutnya kita tambahkan sebuah file migrasi baru dengan beberapa kolom termasuk kolom slug.

php artisan make:model Post -m
//...create_posts_table.php
public function up()
{
   Schema::create('posts', function (Blueprint $table) {
      $table->id();
      $table->string('title');
      $table->string('slug');
      $table->text('body');
      $table->timestamps();
   });
}

Kemudian kita lakukan migrasi.

pre artisan migrate

Membuat Data

Kita lanjutkan dengan membuat html form dan membuat request insert record baru. Silahkan buka file route web.php dan tambahkan di bawah ini.

use Illuminate\Http\Request;
use Illuminate\Support\Str;
use App\Models\Post;
...

Route::post('/store', function (Request $request) {
    $post = new Post; 
    $post->title = $request->title;
    $post->slug = Str::slug($post->title, '-'); 
    $post->body = $request->body;
    $post->save();
    
    return back(); 
});

Route::get('/posts', function () {
    $posts = Post::all();
    return view('posts', ['posts' => $posts]); 
})->name('posts');

Kolom slug kita isi dengan value dari title, namun diubah ke bentuk 'slug' dengan penghubung -.

Selanjutnya buka file welcome.blade.php, ubah html yang ada dengan di bawah ini.

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>My App - @yield('title')</title>
        <style>
            .container{margin:2rem}
        </style>
    </head>
    <body> 
        <div class="container">
            @yield('content')
        </div>
    </body>
</html>

Kemudian buat file baru di direktori views dengan nama posts.blade.php lalu copas html di bawah ini.

@extends('welcome')
@section('title', 'Create New Post | All Posts') 
@section('content')
<h1>Create New Post</h1>
<form method="POST" action="/store">
  @csrf 
  <input type="text" name="title" placeholder="title">
  <input type="text" name="body" placeholder="body">
  <button type="submit">Submit</button>
</form>
<br>
<hr>
  <h1>All Posts</h1>
  @foreach ($posts as $post)
    <h4> {{ $post->title }} </h4>
  @endforeach
@endsection

Jalankan aplikasi php artisan serve, buka http://localhost:8000/posts dan silahkan buat 'post' baru.

Cara Membuat Slug di Laravel

Kemudian lihat hasilnya di database pada tabel posts.

MariaDB [laravel_slug]> select id, title, slug from posts;
+----+--------------------------+-------------------------+
| id | title                    | slug                    |
+----+--------------------------+-------------------------+
|  1 | What is Lorem Ipsum?     | what-is-lorem-ipsum     |
|  2 | Where does it come from? | where-does-it-come-from |
+----+--------------------------+-------------------------+
2 rows in set (0.001 sec)

Postingan terkait 'membuat data': Cara menyimpan data dengan relasi model terkait di laravel

Route Parameter

Setelah kita memiliki slug, tahap selanjutnya adalah bagaimana menggunakan slug tersebut sebagai url untuk mengakases data objek.

Mari kita buat route baru dengan menambahkan model eloquent terkait dengan menambahkan kolom pada parameter, seperti di bawah ini.

 
Route::get('/post/{post:slug}', function (Post $post) {
    return view('show', ['post' => $post]); 
})->name('show');

Lalu buka kembali file posts.blade.php, tambahkan tag a dengan route dan value slug pada title.

<h4><a href="{{ route('show', $post->slug )}}"> {{ $post->title }} </a></h4>

Kita tambahkan sebuah halalaman. Silahkan buat file baru dengan nama show.blade.php pada direktori views dan copas html berikut.

@extends('welcome')

@section('title', $post->title) 

@section('content')
  <h4>< <a href="{{ route('posts')}}">Back</a> </h4> 
  <hr>
  <h1>{{$post->title}}</h1>
  <p>{{$post->body}}</p> 
@endsection

Sekarang silahkan coba untuk membuka link pada halaman posts.

Cara Membuat Slug di Laravel

Menyesuaikan Kunci Parameter

Di atas, kita berhasil menggunakan slug untuk menampilkan 'post' dengan menggunakan model pada parameter route. Sebenarnya ada cara lain yang dapat kita gunakan.

Kita juga bisa menggunakan metode getRouteKeyName() dan menentukan kolom atau key yang ingin digunakan seperti ID atau slug.

Untuk menggunkannya, silahkan tambahkan metode getRouteKeyName() seperti dibawah pada file model Post.php.

public function getRouteKeyName()
{
   return 'slug';
}

Kita bisa gunakan 'id' atau 'slug'. Selanjutnya pada route, buat seperti dibawah ini.

Route::get('/post/{post}', function (Post $post) {
    return view('show', ['post' => $post]); 
})->name('show');

Silahkan coba kembali buka link yang ada.

Selesai

Demikian cara membuat slug di laravel. Silahkan dicoba dan dikembangkan.

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel

Berlangganan

Berlangganan untuk mendapat pemberitahuan artikel terbaru via email.