m.techreview.click
  • Website
  • Hosting
  • Indonesia
  • Laravel
  • Bisnis
  • Development
No Result
View All Result
m.techreview.click
  • Website
  • Hosting
  • Indonesia
  • Laravel
  • Bisnis
  • Development
No Result
View All Result
m.techreview.click
No Result
View All Result
Home Blog

Tutorial Laravel Pemula: Membuat Blog Sederhana dengan Mudah

Jasper by Jasper
July 7, 2025
in Blog, Laravel, Pemula, Sederhana, Tutorial
0
Share on FacebookShare on Twitter

Selamat datang, para programmer muda yang bersemangat! Apakah kamu ingin belajar Laravel dan membuat blog sendiri? Jangan khawatir, artikel ini adalah panduan tutorial Laravel pemula yang akan membimbingmu langkah demi langkah membuat blog sederhana dengan mudah. Kita akan membahas dari instalasi hingga tampilan akhir blog yang keren. Mari kita mulai petualangan seru ini!

Daftar Isi

  • Pendahuluan: Mengapa Laravel untuk Blog Sederhana?
  • Persiapan Awal: Instalasi Laravel dan Konfigurasi Dasar
  • Membuat Database dan Model untuk Artikel Blog
  • Membuat Controller: Mengatur Logika Blog
  • Routes Laravel: Menentukan Alur Aplikasi Blog
  • Tampilan Depan Blog: Membuat View dengan Blade Template
  • Menambahkan Fitur CRUD (Create, Read, Update, Delete) pada Artikel
  • Implementasi Fitur Upload Gambar pada Artikel
  • Penambahan Fitur Kategorisasi pada Blog
  • Optimasi SEO Sederhana untuk Blog Laravel Kamu
  • Keamanan Dasar Blog Laravel: Mencegah Serangan Umum
  • Kesimpulan dan Langkah Selanjutnya dalam Pengembangan Blog Laravel

Pendahuluan: Mengapa Laravel untuk Blog Sederhana?

Sebelum kita mulai coding, mari kita pahami mengapa Laravel adalah pilihan yang tepat untuk membuat blog sederhana. Laravel adalah framework PHP yang populer dan dikenal karena beberapa alasan:

  • Struktur Kode yang Terorganisir: Laravel menyediakan struktur folder dan file yang jelas, memudahkan kita dalam mengelola proyek blog yang kompleks.
  • Eloquent ORM: Interaksi dengan database menjadi lebih mudah dan aman dengan Eloquent ORM (Object-Relational Mapping). Kita tidak perlu menulis query SQL secara manual.
  • Blade Templating Engine: Blade memudahkan kita dalam membuat tampilan (view) yang dinamis dan menarik dengan sintaks yang sederhana dan intuitif.
  • Fitur-Fitur Bawaan yang Kaya: Laravel dilengkapi dengan banyak fitur bawaan seperti otentikasi, routing, middleware, dan masih banyak lagi.
  • Komunitas yang Besar: Jika kamu mengalami kesulitan, ada banyak sekali sumber daya, forum, dan tutorial online yang siap membantu.

Intinya, Laravel membantu kita membuat blog sederhana dengan mudah karena menyederhanakan banyak tugas-tugas yang rumit dalam pengembangan web.

Related Post

Cara Mengoptimasi Kecepatan Website dengan GTmetrix Indonesia: Skor A Mudah Dicapai

August 22, 2025

Cara Membuat Website Sederhana dengan HTML CSS Indonesia: Tutorial Lengkap

August 22, 2025

Belajar Web Development dari Nol Bahasa Indonesia: Langkah Mudah untuk Pemula

August 21, 2025

Hosting Domain Gratis Terbaik di Indonesia: Solusi Hemat untuk Pemula

August 19, 2025

Persiapan Awal: Instalasi Laravel dan Konfigurasi Dasar

Oke, mari kita mulai dengan persiapan awal. Pastikan kamu sudah memiliki beberapa hal berikut:

  1. PHP: Pastikan PHP sudah terinstal di komputermu. Disarankan menggunakan PHP versi 7.4 atau lebih tinggi. Kamu bisa mengecek versi PHP dengan perintah php -v di terminal.
  2. Composer: Composer adalah dependency manager untuk PHP. Download dan instal Composer dari getcomposer.org.
  3. Database Server: Kamu bisa menggunakan MySQL, PostgreSQL, atau database server lainnya. Pastikan database server sudah berjalan.
  4. Text Editor/IDE: Pilih text editor atau IDE favoritmu, seperti VS Code, Sublime Text, atau PhpStorm.

Setelah semua persiapan di atas selesai, mari kita instal Laravel!

  1. Buka Terminal/Command Prompt: Navigasikan ke direktori tempat kamu ingin menyimpan proyek blog kamu.

  2. Jalankan Perintah Instalasi Laravel: Gunakan perintah Composer berikut:

    composer create-project --prefer-dist laravel/laravel nama-blog

    Ganti nama-blog dengan nama proyek blog kamu. Perintah ini akan mengunduh dan menginstal Laravel ke dalam direktori nama-blog.

  3. Masuk ke Direktori Proyek:

    cd nama-blog
  4. Konfigurasi Environment: Laravel menggunakan file .env untuk menyimpan konfigurasi aplikasi, termasuk koneksi database. Salin file .env.example menjadi .env:

    cp .env.example .env

    Kemudian, buka file .env dengan text editor kamu dan ubah konfigurasi database sesuai dengan database yang kamu gunakan. Misalnya, untuk MySQL:

    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=nama_database_kamu
    DB_USERNAME=username_database_kamu
    DB_PASSWORD=password_database_kamu

    Ganti nama_database_kamu, username_database_kamu, dan password_database_kamu dengan informasi yang sesuai.

  5. Generate Key Aplikasi: Jalankan perintah berikut untuk menghasilkan key aplikasi:

    php artisan key:generate
  6. Jalankan Server Pengembangan: Untuk menjalankan server pengembangan Laravel, gunakan perintah:

    php artisan serve

    Buka browser kamu dan kunjungi alamat yang ditampilkan (biasanya http://127.0.0.1:8000). Jika kamu melihat halaman selamat datang Laravel, berarti instalasi berhasil!

Membuat Database dan Model untuk Artikel Blog

Selanjutnya, kita akan membuat database dan model untuk menyimpan artikel blog kita.

  1. Buat Database: Gunakan tools database client kamu (seperti phpMyAdmin, Dbeaver, atau MySQL Workbench) untuk membuat database baru dengan nama yang sesuai dengan yang kamu konfigurasi di file .env.

  2. Buat Model Artikel: Laravel menyediakan Artisan console untuk memudahkan kita membuat model. Jalankan perintah berikut di terminal:

    php artisan make:model Article -m

    Perintah ini akan membuat dua file:

    • app/Models/Article.php: File model untuk artikel.
    • database/migrations/xxxx_xx_xx_xxxxxx_create_articles_table.php: File migration untuk membuat tabel articles di database.
  3. Edit File Migration: Buka file migration yang baru dibuat dan tambahkan kolom-kolom yang dibutuhkan untuk artikel, seperti title, content, slug, dan published_at. Contoh:

    <?php
    
    use IlluminateDatabaseMigrationsMigration;
    use IlluminateDatabaseSchemaBlueprint;
    use IlluminateSupportFacadesSchema;
    
    class CreateArticlesTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('articles', function (Blueprint $table) {
                $table->id();
                $table->string('title');
                $table->string('slug')->unique();
                $table->text('content');
                $table->timestamp('published_at')->nullable();
                $table->timestamps();
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::dropIfExists('articles');
        }
    }

    Penjelasan Kolom:

    • id(): Primary key (auto-incrementing integer).
    • title: Judul artikel (string).
    • slug: URL friendly version dari judul (string, unique). Contoh: “Tutorial Laravel Pemula” menjadi “tutorial-laravel-pemula”.
    • content: Isi artikel (text).
    • published_at: Tanggal dan waktu artikel dipublikasikan (timestamp, boleh kosong).
    • timestamps(): Membuat kolom created_at dan updated_at secara otomatis.
  4. Jalankan Migration: Jalankan perintah berikut untuk membuat tabel di database:

    php artisan migrate

    Perintah ini akan menjalankan semua file migration yang ada di direktori database/migrations.

  5. Edit Model Artikel: Buka file app/Models/Article.php dan tambahkan $fillable property untuk menentukan kolom mana saja yang boleh diisi secara massal (mass assignment). Ini penting untuk keamanan.

    <?php
    
    namespace AppModels;
    
    use IlluminateDatabaseEloquentFactoriesHasFactory;
    use IlluminateDatabaseEloquentModel;
    
    class Article extends Model
    {
        use HasFactory;
    
        protected $fillable = [
            'title',
            'slug',
            'content',
            'published_at',
        ];
    }

Membuat Controller: Mengatur Logika Blog

Sekarang kita akan membuat controller untuk mengatur logika blog kita, seperti menampilkan daftar artikel, menampilkan detail artikel, membuat artikel baru, mengedit artikel, dan menghapus artikel.

  1. Buat Controller Artikel: Jalankan perintah berikut di terminal:

    php artisan make:controller ArticleController --resource

    Perintah ini akan membuat controller dengan nama ArticleController di direktori app/Http/Controllers. Opsi --resource akan membuat controller dengan method-method yang umum digunakan untuk CRUD (Create, Read, Update, Delete).

  2. Edit Controller Artikel: Buka file app/Http/Controllers/ArticleController.php dan implementasikan method-method berikut:

    <?php
    
    namespace AppHttpControllers;
    
    use AppModelsArticle;
    use IlluminateHttpRequest;
    
    class ArticleController extends Controller
    {
        /**
         * Display a listing of the resource.
         *
         * @return IlluminateHttpResponse
         */
        public function index()
        {
            $articles = Article::orderBy('published_at', 'desc')->paginate(10); // Menampilkan 10 artikel per halaman
            return view('articles.index', compact('articles'));
        }
    
        /**
         * Show the form for creating a new resource.
         *
         * @return IlluminateHttpResponse
         */
        public function create()
        {
            return view('articles.create');
        }
    
        /**
         * Store a newly created resource in storage.
         *
         * @param  IlluminateHttpRequest  $request
         * @return IlluminateHttpResponse
         */
        public function store(Request $request)
        {
            $request->validate([
                'title' => 'required|max:255',
                'content' => 'required',
            ]);
    
            $slug = Str::slug($request->title); // Membuat slug dari judul
            Article::create([
                'title' => $request->title,
                'slug' => $slug,
                'content' => $request->content,
                'published_at' => now(), // Artikel langsung dipublikasikan
            ]);
    
            return redirect()->route('articles.index')->with('success', 'Artikel berhasil ditambahkan!');
        }
    
        /**
         * Display the specified resource.
         *
         * @param  AppModelsArticle  $article
         * @return IlluminateHttpResponse
         */
        public function show(Article $article)
        {
            return view('articles.show', compact('article'));
        }
    
        /**
         * Show the form for editing the specified resource.
         *
         * @param  AppModelsArticle  $article
         * @return IlluminateHttpResponse
         */
        public function edit(Article $article)
        {
            return view('articles.edit', compact('article'));
        }
    
        /**
         * Update the specified resource in storage.
         *
         * @param  IlluminateHttpRequest  $request
         * @param  AppModelsArticle  $article
         * @return IlluminateHttpResponse
         */
        public function update(Request $request, Article $article)
        {
            $request->validate([
                'title' => 'required|max:255',
                'content' => 'required',
            ]);
    
            $slug = Str::slug($request->title);
            $article->update([
                'title' => $request->title,
                'slug' => $slug,
                'content' => $request->content,
            ]);
    
            return redirect()->route('articles.index')->with('success', 'Artikel berhasil diperbarui!');
        }
    
        /**
         * Remove the specified resource from storage.
         *
         * @param  AppModelsArticle  $article
         * @return IlluminateHttpResponse
         */
        public function destroy(Article $article)
        {
            $article->delete();
    
            return redirect()->route('articles.index')->with('success', 'Artikel berhasil dihapus!');
        }
    }

    Penjelasan Method:

    • index(): Menampilkan daftar artikel. Menggunakan orderBy untuk mengurutkan berdasarkan tanggal publikasi terbaru dan paginate untuk membagi artikel menjadi beberapa halaman.
    • create(): Menampilkan form untuk membuat artikel baru.
    • store(Request $request): Menyimpan artikel baru ke database. Melakukan validasi input menggunakan $request->validate() dan membuat slug otomatis dari judul.
    • show(Article $article): Menampilkan detail artikel. Laravel menggunakan Route Model Binding untuk otomatis mencari artikel berdasarkan ID dan memasukkannya ke dalam parameter $article.
    • edit(Article $article): Menampilkan form untuk mengedit artikel.
    • update(Request $request, Article $article): Memperbarui artikel di database.
    • destroy(Article $article): Menghapus artikel dari database.

Routes Laravel: Menentukan Alur Aplikasi Blog

Selanjutnya, kita perlu mendefinisikan routes (rute) untuk menghubungkan URL dengan controller kita.

  1. Edit File routes/web.php: Buka file routes/web.php dan tambahkan routes untuk controller artikel kita. Karena kita menggunakan controller resource, kita bisa menggunakan Route::resource().

    <?php
    
    use IlluminateSupportFacadesRoute;
    use AppHttpControllersArticleController;
    
    /*
    |--------------------------------------------------------------------------
    | Web Routes
    |--------------------------------------------------------------------------
    |
    | Here is where you can register web routes for your application. These
    | routes are loaded by the RouteServiceProvider within a group which
    | contains the "web" middleware group. Now create something great!
    |
    */
    
    Route::get('/', function () {
        return view('welcome');
    });
    
    Route::resource('articles', ArticleController::class);

    Baris Route::resource('articles', ArticleController::class); akan otomatis membuat routes berikut:

    • GET /articles: Menampilkan daftar artikel (ArticleController@index)
    • GET /articles/create: Menampilkan form untuk membuat artikel baru (ArticleController@create)
    • POST /articles: Menyimpan artikel baru (ArticleController@store)
    • GET /articles/{article}: Menampilkan detail artikel (ArticleController@show)
    • GET /articles/{article}/edit: Menampilkan form untuk mengedit artikel (ArticleController@edit)
    • PUT/PATCH /articles/{article}: Memperbarui artikel (ArticleController@update)
    • DELETE /articles/{article}: Menghapus artikel (ArticleController@destroy)

Tampilan Depan Blog: Membuat View dengan Blade Template

Sekarang kita akan membuat tampilan (view) untuk blog kita menggunakan Blade templating engine.

  1. Buat Direktori View: Buat direktori articles di dalam direktori resources/views. Ini akan menjadi tempat kita menyimpan view untuk artikel.

  2. Buat File View: Buat file-file berikut di dalam direktori resources/views/articles:

    • index.blade.php: Menampilkan daftar artikel.
    • create.blade.php: Form untuk membuat artikel baru.
    • show.blade.php: Menampilkan detail artikel.
    • edit.blade.php: Form untuk mengedit artikel.

    Berikut adalah contoh isi dari file index.blade.php:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Daftar Artikel</title>
    </head>
    <body>
        <h1>Daftar Artikel</h1>
    
        @if (session('success'))
            <div class="alert alert-success">
                {{ session('success') }}
            </div>
        @endif
    
        <a href="{{ route('articles.create') }}">Tambah Artikel Baru</a>
    
        <ul>
            @foreach ($articles as $article)
                <li>
                    <a href="{{ route('articles.show', $article->slug) }}">{{ $article->title }}</a>
                    - <a href="{{ route('articles.edit', $article->slug) }}">Edit</a>
                    - <form action="{{ route('articles.destroy', $article->slug) }}" method="POST" style="display: inline;">
                        @csrf
                        @method('DELETE')
                        <button type="submit" onclick="return confirm('Apakah kamu yakin ingin menghapus artikel ini?')">Hapus</button>
                    </form>
                </li>
            @endforeach
        </ul>
    
        {{ $articles->links() }} <!-- Menampilkan paginasi -->
    
    </body>
    </html>

    Penjelasan:

    • @if (session('success')) ... @endif: Menampilkan pesan sukses jika ada.
    • {{ route('articles.create') }}: Menghasilkan URL untuk route articles.create.
    • @foreach ($articles as $article) ... @endforeach: Looping melalui daftar artikel.
    • {{ route('articles.show', $article->slug) }}: Menghasilkan URL untuk menampilkan detail artikel berdasarkan slug.
    • {{ $articles->links() }}: Menampilkan link paginasi.

    Buat juga file create.blade.php, show.blade.php, dan edit.blade.php dengan format HTML yang sesuai untuk menampilkan form dan detail artikel. Gunakan Blade directive seperti @csrf untuk menambahkan CSRF protection pada form. Jangan lupa untuk menggunakan HTML form elements yang sesuai untuk input data artikel (seperti <input type="text">, <textarea>).

Menambahkan Fitur CRUD (Create, Read, Update, Delete) pada Artikel

Kita sudah membuat controller, model, dan view. Sekarang, coba jalankan aplikasi dan uji fitur CRUD pada artikel.

  1. Buka Browser: Kunjungi http://127.0.0.1:8000/articles (atau URL yang sesuai dengan server pengembangan kamu).
  2. Tambah Artikel: Klik “Tambah Artikel Baru” dan isi form.
  3. Lihat Artikel: Klik judul artikel untuk melihat detailnya.
  4. Edit Artikel: Klik “Edit” untuk mengubah artikel.
  5. Hapus Artikel: Klik “Hapus” untuk menghapus artikel.

Jika semua berjalan lancar, berarti fitur CRUD sudah berhasil diimplementasikan!

Implementasi Fitur Upload Gambar pada Artikel

Sebuah blog belum lengkap tanpa gambar! Mari kita tambahkan fitur upload gambar pada artikel.

  1. Tambahkan Kolom image ke Tabel articles: Tambahkan kolom image (string) ke tabel articles menggunakan migration. Buat migration baru dengan perintah:

    php artisan make:migration add_image_to_articles_table

    Edit file migration yang baru dibuat:

    <?php
    
    use IlluminateDatabaseMigrationsMigration;
    use IlluminateDatabaseSchemaBlueprint;
    use IlluminateSupportFacadesSchema;
    
    class AddImageToArticlesTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::table('articles', function (Blueprint $table) {
                $table->string('image')->nullable()->after('content');
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::table('articles', function (Blueprint $table) {
                $table->dropColumn('image');
            });
        }
    }

    Jalankan migration:

    php artisan migrate
  2. Update Model Article: Tambahkan image ke $fillable property di model Article:

    protected $fillable = [
        'title',
        'slug',
        'content',
        'published_at',
        'image', // Tambahkan image
    ];
  3. Update Controller ArticleController: Ubah method store dan update di ArticleController untuk menangani upload gambar:

    public function store(Request $request)
    {
        $request->validate([
            'title' => 'required|max:255',
            'content' => 'required',
            'image' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048', // Validasi file image
        ]);
    
        $slug = Str::slug($request->title);
    
        if ($request->hasFile('image')) {
            $image = $request->file('image');
            $imageName = time().'.'.$image->getClientOriginalExtension(); // Nama file unik
            $image->move(public_path('images'), $imageName); // Simpan file ke public/images
    
            Article::create([
                'title' => $request->title,
                'slug' => $slug,
                'content' => $request->content,
                'published_at' => now(),
                'image' => $imageName, // Simpan nama file ke database
            ]);
        } else {
            Article::create([
                'title' => $request->title,
                'slug' => $slug,
                'content' => $request->content,
                'published_at' => now(),
            ]);
        }
    
        return redirect()->route('articles.index')->with('success', 'Artikel berhasil ditambahkan!');
    }
    
    public function update(Request $request, Article $article)
    {
        $request->validate([
            'title' => 'required|max:255',
            'content' => 'required',
            'image' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048',
        ]);
    
        $slug = Str::slug($request->title);
    
        if ($request->hasFile('image')) {
            // Hapus gambar lama jika ada
            if ($article->image) {
                File::delete(public_path('images/' . $article->image));
            }
    
            $image = $request->file('image');
            $imageName = time().'.'.$image->getClientOriginalExtension();
            $image->move(public_path('images'), $imageName);
    
            $article->update([
                'title' => $request->title,
                'slug' => $slug,
                'content' => $request->content,
                'image' => $imageName,
            ]);
        } else {
            $article->update([
                'title' => $request->title,
                'slug' => $slug,
                'content' => $request->content,
            ]);
        }
    
        return redirect()->route('articles.index')->with('success', 'Artikel berhasil diperbarui!');
    }

    Penjelasan:

    • $request->hasFile('image'): Memeriksa apakah ada file yang diupload dengan nama image.
    • $image = $request->file('image'): Mendapatkan objek file yang diupload.
    • $imageName = time().'.'.$image->getClientOriginalExtension(): Membuat nama file unik berdasarkan timestamp dan ekstensi file asli.
    • $image->move(public_path('images'), $imageName): Memindahkan file ke direktori public/images. Pastikan direktori public/images ada.
    • File::delete(public_path('images/' . $article->image)): Menghapus gambar lama saat memperbarui artikel.
  4. Update View create.blade.php dan edit.blade.php: Tambahkan input file ke form:

    <div class="form-group">
        <label for="image">Gambar</label>
        <input type="file" class="form-control-file" id="image" name="image">
    </div>
  5. Tampilkan Gambar di View show.blade.php: Tampilkan gambar di view show.blade.php:

    @if($article->image)
        <img src="{{ asset('images/' . $article->image) }}" alt="{{ $article->title }}" width="200">
    @endif

    asset('images/' . $article->image) menghasilkan URL lengkap ke file gambar.

Penambahan Fitur Kategorisasi pada Blog

Agar blog lebih terstruktur, mari tambahkan fitur kategorisasi.

  1. Buat Model dan Migration Kategori:

    php artisan make:model Category -m

    Edit file migration database/migrations/xxxx_xx_xx_xxxxxx_create_categories_table.php:

    <?php
    
    use IlluminateDatabaseMigrationsMigration;
    use IlluminateDatabaseSchemaBlueprint;
    use IlluminateSupportFacadesSchema;
    
    class CreateCategoriesTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('categories', function (Blueprint $table) {
                $table->id();
                $table->string('name');
                $table->string('slug')->unique();
                $table->timestamps();
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::dropIfExists('categories');
        }
    }

    Jalankan migration:

    php artisan migrate

    Edit model app/Models/Category.php:

    <?php
    
    namespace AppModels;
    
    use IlluminateDatabaseEloquentFactoriesHasFactory;
    use IlluminateDatabaseEloquentModel;
    
    class Category extends Model
    {
        use HasFactory;
    
        protected $fillable = [
            'name',
            'slug',
        ];
    
        public function articles()
        {
            return $this->belongsToMany(Article::class);
        }
    }
  2. Relasi Many-to-Many antara Artikel dan Kategori: Kita akan menggunakan relasi belongsToMany karena satu artikel bisa memiliki banyak kategori dan satu kategori bisa dimiliki oleh banyak artikel.

    Buat migration untuk pivot table article_category:

    php artisan make:migration create_article_category_table

    Edit file migration database/migrations/xxxx_xx_xx_xxxxxx_create_article_category_table.php:

    <?php
    
    use IlluminateDatabaseMigrationsMigration;
    use IlluminateDatabaseSchemaBlueprint;
    use IlluminateSupportFacadesSchema;
    
    class CreateArticleCategoryTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('article_category', function (Blueprint $table) {
                $table->id();
                $table->foreignId('article_id')->constrained()->onDelete('cascade');
                $table->foreignId('category_id')->constrained()->onDelete('cascade');
                $table->timestamps();
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::dropIfExists('article_category');
        }
    }

    Jalankan migration:

    php artisan migrate

    Tambahkan relasi di model Article:

    // app/Models/Article.php
    public function categories()
    {
        return $this->belongsToMany(Category::class);
    }
  3. Buat Controller dan View Kategori (Opsional): Kamu bisa membuat controller dan view untuk mengelola kategori secara terpisah. Atau, kamu bisa langsung menambahkan form pemilihan kategori di view create.blade.php dan edit.blade.php.

  4. Update Controller ArticleController: Ubah method store dan update di ArticleController untuk menangani pemilihan kategori:

    public function store(Request $request)
    {
        $request->validate([
            'title' => 'required|max:255',
            'content' => 'required',
            'image' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048',
            'categories' => 'array', // Validasi kategori (harus array)
        ]);
    
        // ... (kode upload gambar seperti sebelumnya) ...
    
        $article = Article::create([ /* ... data artikel ... */ ]);
    
        if ($request->has('categories')) {
            $article->categories()->attach($request->categories); // Simpan kategori ke pivot table
        }
    
        return redirect()->route('articles.index')->with('success', 'Artikel berhasil ditambahkan!');
    }
    
    public function update(Request $request, Article $article)
    {
        $request->validate([
            'title' => 'required|max:255',
            'content' => 'required',
            'image' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048',
            'categories' => 'array',
        ]);
    
        // ... (kode upload gambar seperti sebelumnya) ...
    
        $article->update([ /* ... data artikel ... */ ]);
    
        $article->categories()->sync($request->categories); // Sinkronkan kategori
    
        return redirect()->route('articles.index')->with('success', 'Artikel berhasil diperbarui!');
    }
  5. Update View create.blade.php dan edit.blade.php: Tambahkan form pemilihan kategori:

    <div class="form-group">
        <label for="categories">Kategori</label>
        <select class="form-control" id="categories" name="categories[]" multiple>
            @foreach(AppModelsCategory::all() as $category)
                <option value="{{ $category->id }}">{{ $category->name }}</option>
            @endforeach
        </select>
    </div>

    name="categories[]" memungkinkan kita mengirimkan multiple values sebagai array.

  6. Tampilkan Kategori di View show.blade.php:

    <p>Kategori:
        @foreach($article->categories as $category)
            <a href="#">{{ $category->name }}</a>,
        @endforeach
    </p>

Optimasi SEO Sederhana untuk Blog Laravel Kamu

Setelah blog selesai, penting untuk melakukan optimasi SEO (Search Engine Optimization) agar blog kamu mudah ditemukan di mesin pencari seperti Google. Berikut beberapa tips SEO sederhana yang bisa kamu terapkan:

  1. Gunakan Judul yang Relevan dan Menarik: Pastikan judul artikel kamu mengandung keyword utama (Tutorial Laravel Pemula: Membuat Blog Sederhana dengan Mudah) dan menarik perhatian pembaca.

  2. Gunakan Keyword di Awal Judul: Mesin pencari cenderung memberikan bobot lebih tinggi pada keyword yang berada di awal judul.

  3. Buat Slug yang SEO Friendly: Slug adalah versi URL-friendly dari judul artikel. Gunakan keyword utama dalam slug dan hindari penggunaan karakter yang tidak perlu. Kita sudah otomatis membuat slug dengan Str::slug() di controller.

  4. Gunakan Heading (H1, H2, H3, dst.): Gunakan heading untuk memstruktur konten artikel kamu. Heading membantu mesin pencari memahami topik dan subtopik artikel. Keyword utama sebaiknya muncul di salah satu heading (seperti H1 di judul dan beberapa H2).

  5. Optimalkan Konten Artikel:

    • Gunakan Keyword Secara Natural: Sebarkan keyword utama dan secondary keyword (seperti “membuat website dengan laravel”, “belajar laravel untuk pemula”) secara natural di seluruh konten artikel. Hindari keyword stuffing (penggunaan keyword berlebihan yang membuat artikel sulit dibaca).
    • Buat Konten yang Berkualitas dan Informatif: Mesin pencari menyukai konten yang bermanfaat bagi pembaca. Pastikan artikel kamu memberikan informasi yang lengkap, akurat, dan mudah dipahami.
    • Gunakan Paragraf Pendek: Paragraf pendek memudahkan pembaca dalam mencerna informasi.
    • Gunakan List (Ordered List dan Unordered List): List membantu memecah informasi menjadi poin-poin yang mudah dibaca.
  6. Optimalkan Gambar:

    • Gunakan Alt Text: Tambahkan alt text (teks alternatif) pada setiap gambar. Alt text membantu mesin pencari memahami isi gambar dan juga berguna bagi pengguna yang memiliki masalah penglihatan. Alt text sebaiknya mengandung keyword yang relevan.
    • Kompres Gambar: Kompres gambar agar ukuran file lebih kecil. Ukuran file yang besar dapat memperlambat loading website, yang dapat mempengaruhi ranking SEO.
  7. Gunakan Internal Linking: Tautkan artikel-artikel terkait di dalam blog kamu. Internal linking membantu mesin pencari menjelajahi blog kamu dan meningkatkan engagement pengguna.

  8. Gunakan Meta Description: Meta description adalah ringkasan singkat dari konten artikel yang ditampilkan di halaman hasil pencarian. Tulis meta description yang menarik dan mengandung keyword utama agar orang tertarik untuk mengklik artikel kamu. Kamu bisa menambahkan meta description di dalam tag <head> di view artikel.

  9. Pastikan Website Mobile-Friendly: Pastikan website kamu responsif dan dapat diakses dengan baik di perangkat mobile. Google menggunakan mobile-first indexing, yang berarti Googlebot merayapi dan mengindeks website dari versi mobile terlebih dahulu.

  10. Daftarkan Blog ke Google Search Console: Google Search Console adalah tools gratis dari Google yang membantu kamu memantau dan mengelola kehadiran website kamu di Google Search. Dengan Google Search Console, kamu bisa melihat keyword apa saja yang membuat orang menemukan website kamu, memantau error crawl, dan mengirimkan sitemap.

Keamanan Dasar Blog Laravel: Mencegah Serangan Umum

Keamanan adalah aspek penting yang tidak boleh diabaikan dalam pengembangan blog. Berikut beberapa langkah keamanan dasar yang bisa kamu terapkan:

  1. Gunakan HTTPS: Pastikan website kamu menggunakan HTTPS (Hypertext Transfer Protocol Secure) untuk mengenkripsi komunikasi antara browser dan server. HTTPS melindungi data sensitif seperti password dan informasi pribadi dari penyadapan
Tags: Blog LaravelCodingLaravellaravel pemulaMembuat BlogPemrograman WebpemulaPHP FrameworkTutorial LaravelWeb Development
Jasper

Jasper

Related Posts

GTmetrix

Cara Mengoptimasi Kecepatan Website dengan GTmetrix Indonesia: Skor A Mudah Dicapai

by Finnian
August 22, 2025
CSS

Cara Membuat Website Sederhana dengan HTML CSS Indonesia: Tutorial Lengkap

by Seraphina
August 22, 2025
Bahasa

Belajar Web Development dari Nol Bahasa Indonesia: Langkah Mudah untuk Pemula

by Jasper
August 21, 2025
Next Post

Cara Konfigurasi Database di Laravel: Panduan Lengkap untuk Pemula

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recommended

Cara Membuat Website Sederhana dengan HTML CSS Indonesia: Tutorial Lengkap

August 22, 2025

Belajar Web Development dengan Framework React: Panduan Lengkap untuk Frontend Developer

August 11, 2025

Manfaat Menggunakan SSL untuk Keamanan Website: Lindungi Data Pelanggan Anda

August 17, 2025

Hosting Cloud Terbaik untuk UKM Indonesia: Skalabilitas dan Efisiensi

August 20, 2025

Cara Mengoptimasi Kecepatan Website dengan GTmetrix Indonesia: Skor A Mudah Dicapai

August 22, 2025

Cara Membuat Website Sederhana dengan HTML CSS Indonesia: Tutorial Lengkap

August 22, 2025

Template Website Responsif Gratis untuk UMKM Indonesia: Tampilan Profesional Tanpa Biaya

August 22, 2025

Belajar Web Development dari Nol Bahasa Indonesia: Langkah Mudah untuk Pemula

August 21, 2025

m.techreview.click

Our media platform offers reliable news and insightful articles. Stay informed with our comprehensive coverage and in-depth analysis on various topics.
Read more »

Recent Posts

  • Cara Mengoptimasi Kecepatan Website dengan GTmetrix Indonesia: Skor A Mudah Dicapai
  • Cara Membuat Website Sederhana dengan HTML CSS Indonesia: Tutorial Lengkap
  • Template Website Responsif Gratis untuk UMKM Indonesia: Tampilan Profesional Tanpa Biaya

Categories

  • 2024
  • Adaptasi
  • Admin
  • Agency
  • AI
  • Akses
  • Aktif
  • Akuntansi
  • Algoritma
  • Analisis
  • Anggaran
  • Antarmuka
  • Antisipasi
  • API
  • Aplikasi
  • Artikel
  • Asynchronous
  • Audio
  • Authentication
  • Authorization
  • Backend
  • Background
  • Backup
  • Bahasa
  • Bandwidth
  • Bantuan
  • Belajar
  • Bergabung
  • Biaya
  • Bisnis
  • Blog
  • Blogger
  • Bootstrap
  • Branding
  • Budget
  • Bukti
  • Cepat
  • Chatbot
  • Cloud
  • Coding
  • Company
  • Contoh
  • cPanel
  • CRM
  • CRUD
  • CSS
  • Custom
  • Dampak
  • Dasar
  • Dashboard
  • Data
  • Database
  • Deployment
  • Desain
  • Design
  • Detail
  • Developer
  • Development
  • Digital
  • Diskusi
  • Dokumentasi
  • Domain
  • Download
  • Downtime
  • Dukungan
  • E-commerce
  • Efektif
  • Efisiensi
  • Elementor
  • Eloquent
  • Email
  • Engine
  • Enterprise
  • Error
  • Error generating categories
  • Estimasi
  • Etika
  • Event
  • Faktor
  • Fitur
  • Fleksibel
  • Fortify
  • Foto
  • Framework
  • Freelance
  • Freelancer
  • Fresh
  • Frontend
  • Fungsi
  • Gambar
  • Garansi
  • Gratis
  • GTmetrix
  • Hacker
  • Harga
  • Hemat
  • Here are 5 categories derived from the article title "Hosting dengan Dukungan Pelanggan 24 Jam: Bantuan Kapanpun Dibutuhkan": Hosting
  • Here are 5 categories derived from the article title "Hosting Domain Murah Indonesia dengan Proteksi DDoS Gratis: Solusi Terbaik untuk Website Anda": Hosting
  • Here are 5 categories derived from the article title "Hosting VPS Murah untuk Developer Indonesia: Fleksibilitas dan Kontrol Penuh": Hosting
  • Here are 5 categories derived from the provided list and the article titles: Company
  • Hosting
  • HTML
  • Hybrid
  • Impian
  • Implementasi
  • Indonesia
  • Inovasi
  • Inspirasi
  • Instalasi
  • Integrasi
  • Interaktif
  • Internasional
  • Investasi
  • Jakarta
  • Jasa
  • JavaScript
  • Kampanye
  • Kantor
  • Kapasitas
  • Karir
  • Karyawan
  • Keamanan
  • Keandalan
  • Keberhasilan
  • Kebutuhan
  • Kecepatan
  • Kecil
  • Kehidupan
  • Kemampuan
  • Kemudahan
  • Kerja
  • Kesalahan
  • Kesehatan
  • Keterampilan
  • Keuntungan
  • Keyword
  • Klien
  • Kode
  • Kompetensi
  • Komponen
  • Komunikasi
  • Komunitas
  • Koneksi
  • Konfigurasi
  • Konsep
  • Konten
  • Konversi
  • Kreativitas
  • Kredibilitas
  • Kriteria
  • Kualitas
  • Kurikulum
  • Langkah
  • Laravel
  • Latihan
  • Layanan
  • Lengkap
  • Library
  • Listener
  • Livewire
  • Logika
  • Logo
  • Lokal
  • Loyalitas
  • Machine Learning
  • Mahasiswa
  • Mahir
  • Maintenance
  • Manajemen
  • Manfaat
  • Manufaktur
  • Marketing
  • Masa Depan
  • Masyarakat
  • Media Sosial
  • Medis
  • Memilih
  • Menarik
  • Meningkatkan
  • Metrik
  • Middleware
  • Migrasi
  • Migration
  • Mobile
  • Modern
  • Murah
  • MySQL
  • Node.js
  • Observer
  • Online
  • Operasional
  • Optimasi
  • ORM
  • Otentikasi
  • Otomatis
  • Otomatisasi
  • Package
  • Panduan
  • Pasar
  • Pekerjaan
  • Pelajaran
  • Pelanggan
  • Pelatihan
  • Peluang
  • Pemahaman
  • Pemanfaatan
  • Pemasaran
  • Pembayaran
  • Pembuatan
  • Pemilihan
  • Pemrograman
  • Pemula
  • Penawaran
  • Pengalaman
  • Pengantar
  • Pengenalan
  • Pengguna
  • Penggunaan
  • Pengujian
  • Pengukuran
  • Penipuan
  • Penjualan
  • Penulisan
  • Penyimpanan
  • Peran
  • Perbandingan
  • Perbedaan
  • Performa
  • Performance
  • Peringkat
  • Perlindungan
  • Pertimbangan
  • Pertumbuhan
  • Perusahaan
  • PHP
  • Pilihan
  • Platform
  • Policy
  • Portofolio
  • Potensi
  • Praktik
  • Praktis
  • Prediksi
  • Pribadi
  • Process
  • Produktivitas
  • Profesional
  • Profil
  • Profile
  • Project
  • Promosi
  • Proses
  • Proyek
  • Python
  • Queue
  • React
  • Real-Time
  • Redis
  • Referensi
  • Rekomendasi
  • Relasi
  • Relevansi
  • Remote
  • Request
  • Responsif
  • Responsive
  • Responsive Design
  • Retail
  • Retensi
  • Review
  • Riset
  • Ritel
  • Roadmap
  • Saham
  • Sanctum
  • Sederhana
  • Seeding
  • Sehari-hari
  • SEO
  • Sertifikat
  • Server
  • Sharing
  • Sinkronisasi
  • Sistem
  • Skalabilitas
  • Skill
  • Software
  • Solusi
  • Space
  • SSL
  • Startup
  • Strategi
  • Struktur
  • Studi Kasus
  • Sukses
  • Tampilan
  • Tanggung Jawab
  • Tantangan
  • Teknis
  • Teknologi
  • Teks
  • Template
  • Tenaga Kerja
  • Terbaik
  • Terjangkau
  • Terjemahan
  • Terlengkap
  • Terpercaya
  • Terstruktur
  • Tim
  • Tips
  • Toko
  • Tools
  • Traffic
  • Training
  • Transaksi
  • Transkripsi
  • Tren
  • Trik
  • Troubleshooting
  • Tugas
  • Tutorial
  • Uji Coba
  • UKM
  • UMKM
  • Umum
  • Unlimited
  • Uptime
  • URL
  • User Experience
  • User-Friendly
  • Video
  • Visual
  • VPS
  • Vue.js
  • Wajah
  • Web
  • Web Development
  • Website
  • WHM
  • Windows
  • WordPress
  • XAMPP

Resource

  • About us
  • Contact Us
  • Privacy Policy

© 2024 m.techreview.click.

No Result
View All Result
  • Website
  • Hosting
  • Indonesia
  • Laravel
  • Bisnis
  • Development

© 2024 m.techreview.click.