Cara Membuat Slug di Laravel

wahyunanangwidodo

wahyunanangwidodo Senin, 07 Juni 2021

Cara Membuat Slug di Laravel

Dalam membuat slug di laravel, kita dapat menggunakan metode Str::slug untuk menghasilkan atau merubah string biasa menjadi bentuk slug, seperti di bawah ini:

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

// cara-membuat-slug-di-laravel

Selain itu, dalam pembuatannya, kita juga perlu menyediakan kolom khusus pada tabel database untuk menyimpan slug yang dibuat, dan yang akan dipanggil ketika melakukan query untuk dijadikan sebagai parameter.

Cara pembuatannya sendiri cukup mudah. Sebagai contoh, dan cara penggunaannya, berikut adalah langkah-langkah dalam membuat slug di laravel.

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 halaman. 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 silakan 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 mana yang ingin digunakan, seperti ID atau slug.

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

//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');

Selesai. Silahkan coba buka kembali 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