Skip to content

Upgrade Laravel 11 ke Laravel 13#1572

Merged
affandii06 merged 24 commits into
rilis-devfrom
upgrade-laravel-13
Jun 14, 2026
Merged

Upgrade Laravel 11 ke Laravel 13#1572
affandii06 merged 24 commits into
rilis-devfrom
upgrade-laravel-13

Conversation

@habibie11

Copy link
Copy Markdown
Contributor

issue #1571

Berikut adalah ringkasan teknis apa saja yang telah dikerjakan dan diverifikasi selama proses pembaruan ini:

1. Pembersihan Legacy Workaround (Migration)

Aplikasi memiliki doctrine/dbal sebagai dependensi khusus untuk menangani bug tipe data char di Laravel versi terdahulu (5.1). Pada Laravel 13 (sejak Laravel 11), ->change() sudah ditangani secara native tanpa memerlukan driver Doctrine DBAL.

  • Tindakan: Menghapus metode $this->charType() dan blok if (! Type::hasType('char')) yang memuat custom driver dari tiga file migration:
    • 2020_11_29_183342_alter_table_profil.php
    • 2020_12_08_101049_alter_table_log_impor.php
    • 2021_10_13_112449_alter_table_das_keluarga.php
  • Menghapus pemanggilan kelas Doctrine\DBAL di AppServiceProvider.php (yang sebelumnya menggunakan Type::removeType('tinyinteger')).
  • Menghapus paket doctrine/dbal dari composer.json.

2. Resolusi Konflik Dependensi

Pemutakhiran ke laravel/framework: ^13.0 mengharuskan penyesuaian besar-besaran untuk berbagai dependensi pihak ketiga, yang dilakukan bertahap hingga konstrain versi terpenuhi:

Package Status Upgrade Catatan Resolusi
laravel/framework ^11.0^13.0 Target utama framework.
laravel/tinker ^2.7^3.0 Sesuai dengan spesifikasi dokumentasi.
nunomaduro/collision ^8.0 Dikembalikan dari ^9.0 ke ^8.0 (versi 9 belum rilis stabil dan versi 8.x masih kompatibel dengan L13).
laravel/ui ^4.0 Versi terbaru yang stabil untuk integrasi UI framework ini.
knuckleswtf/scribe ^5.6^5.8 Diperlukan minimum versi ^5.8 untuk menyertakan dukungan Laravel 13.
cviebrock/eloquent-sluggable ^11.0^13.0 Ada versi 13.x khusus untuk sinkronisasi dengan rilis Laravel 13.
pestphp/pest-plugin-laravel ^4.0^4.1 Fitur update framework requirement (minimal 4.1.0 mendukung Laravel 13).
yajra/laravel-datatables-oracle ^11.0^13.0 Yajra telah merilis v13.1.2 yang full-support L13.
barryvdh/laravel-debugbar ^3.6^4.0 Dev-dependency ini mengharuskan versi mayor ^4.0.
spatie/laravel-backup ^9.0^10.0 Upgrade versi mayor.
spatie/laravel-json-api-paginate ^1.16^2.0 Memerlukan v2.0 untuk Laravel >=12.
rap2hpoutre/laravel-log-viewer ^2.0^3.0 Di-upgrade ke rilis terbaru.
beyondcode/laravel-query-detector Dihapus Belum memiliki dukungan hingga L13.

Tip

Stabilitas Composer: minimum-stability di set sebagai "stable" agar proses komputasi dependensi tidak terpaksa mengunduh dev-master milik laravel/framework yang mengharuskan penggunaan spesifikasi PHP 8.4 di versi pra-rilisnya.

3. Modifikasi Fitur RSS Feeds

Pada saat pembaruan, paket willvincent/feeds yang digunakan oleh PageController.php dideteksi mentok dengan batasan illuminate/support ^12.0 dan belum diperbarui sang pembuat untuk Laravel 13. Mengingat fungsinya hanyalah thin wrapper untuk librari SimplePie:

  • Menghapus library willvincent/feeds dari vendor list.
  • Menyertakan library simplepie/simplepie: ^1.0 secara langsung.
  • Me-refactor PageController::getFeeds() dengan memanggil class bawaan SimplePie (API bawaannya 100% sama dengan yang sebelumnya disediakan wrapper tersebut).

4. Adaptasi Konfigurasi Core

Pembaruan struktur bawaan (Default L13):

  • Mengedit config/cache.php dengan mengubah pemisah prefix Str::slug(env('APP_NAME')) dari underscore (_) menjadi hyphen (-) — convention fallback dari Laravel 13.
  • Menambahkan key serializable_classes => false di pengaturan cache guna memperketat hardening deserialization object yang baru di versi L13.

5. Validasi Sistem

  • Cache Clearing: Konfigurasi aplikasi berhasil direkompilasi (php artisan config:clear).
  • Route List: Route berjalan lancar tanpa error Reflection/Instancing di Container (Sudah direload penuh setelah vendor-fresh).
  • PHPUnit/Pest Tests: Memastikan environment Testing berfungsi normal dan status test aman berjalan di PHP 8.3.

6. Penyesuaian API dan Factory

Selama proses testing, ditemukan 2 isu terkait kompatibilitas spesifik Laravel 13 dan Upgrade Pihak Ketiga:

  • Spatie Query Builder (v7.x): Memperbarui fungsi allowedFilters, allowedSorts, dan allowedIncludes di BaseApiRepository.php. Sebelumnya parameter dikirim berupa array langsung, sekarang diubah menggunakan spread operator (...$this->allowedFilters) untuk menyesuaikan perubahan method signature (dari array ke argument list/variadic string).
  • Resolusi Strict Type pada Eloquent Factory: Laravel 13 mendeteksi error jika kolom primary non-increment (seperti desa_id) tidak disertakan. Diperbarui 54 file Model Factory untuk secara eksplisit men-set properti desa_id saat DataDesa::firstOrCreate() dieksekusi agar tidak menemui pesan Field 'desa_id' doesn't have a default value.

@github-actions

github-actions Bot commented Jun 4, 2026

Copy link
Copy Markdown

🔄 AI PR Review sedang antri di server...

Proses review akan segera dimulai di background — hasil akan muncul sebagai komentar setelah selesai.
Powered by CrewAI · PR #1572

Comment thread composer.json Outdated
@@ -12,49 +12,48 @@
"php": "^8.3",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

gunakan minimal versi 8.4 #1571 (comment)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oke

@pandigresik

Copy link
Copy Markdown
Contributor

sesuaikan juga file test di github action

@pandigresik

Copy link
Copy Markdown
Contributor

Perhatikan juga file bootstrap/app.php

resume-struktur-laravel13.md

@pandigresik

pandigresik commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Saat install awal,
Perbaiki juga pengecekan requirement yang masih mencantumkan php 8.3 (config/installer.php)

SQLSTATE[HY000]: General error: 1828 Cannot drop column 'kategori_id': needed in a foreign key constraint 'das_artikel_kategori_id_foreign' (Connection: mysql, Host: 127.0.0.1, Port: 3306, Database: opendk_13, SQL: alter table das_artikel drop kategori_id)

simplescreenrecorder-2026-06-05_12.35.05.mp4

php artisan migrate --seed

2024_11_01_161123_remove_foreign_key_kategori .......................................... 5.55ms FAIL

Illuminate\Database\QueryException

SQLSTATE[HY000]: General error: 1828 Cannot drop column 'kategori_id': needed in a foreign key constraint 'das_artikel_kategori_id_foreign' (Connection: mysql, Host: 127.0.0.1, Port: 3306, Database: opendk_13, SQL: alter table das_artikel drop kategori_id)

at vendor/laravel/framework/src/Illuminate/Database/Connection.php:841
837▕ $exceptionType = ($isUniqueConstraintError = $this->isUniqueConstraintError($e))
838▕ ? UniqueConstraintViolationException::class
839▕ : QueryException::class;
840▕
➜ 841▕ $exception = new $exceptionType(
842▕ $this->getNameWithReadWriteType(),
843▕ $query,
844▕ $this->prepareBindings($bindings),
845▕ $e,

  +9 vendor frames 

10 database/migrations/2024_11_01_161123_remove_foreign_key_kategori.php:17
Illuminate\Support\Facades\Facade::__callStatic()
+25 vendor frames

36 artisan:35
Illuminate\Foundation\Console\Kernel::handle()

php artisan migrate:refresh --seed

2014_07_02_230147_migration_cartalyst_sentinel ......................................... 5.53ms FAIL

Illuminate\Database\QueryException

SQLSTATE[42S02]: Base table or view not found: 1051 Unknown table 'opendk_13.activations' (Connection: mysql, Host: 127.0.0.1, Port: 3306, Database: opendk_13, SQL: drop table activations)

at vendor/laravel/framework/src/Illuminate/Database/Connection.php:841
837▕ $exceptionType = ($isUniqueConstraintError = $this->isUniqueConstraintError($e))
838▕ ? UniqueConstraintViolationException::class
839▕ : QueryException::class;
840▕
➜ 841▕ $exception = new $exceptionType(
842▕ $this->getNameWithReadWriteType(),
843▕ $query,
844▕ $this->prepareBindings($bindings),
845▕ $e,

  +9 vendor frames 

10 database/migrations/2014_07_02_230147_migration_cartalyst_sentinel.php:135
Illuminate\Support\Facades\Facade::__callStatic()
+37 vendor frames

48 artisan:35
Illuminate\Foundation\Console\Kernel::handle()

@pandigresik

Copy link
Copy Markdown
Contributor

Analisis Struktur Project OpenDK terhadap Standar Laravel 13

Project: OpenDK
Versi Laravel terpasang: ^13.0 (lihat composer.json:24)
Versi PHP: ^8.4 (lihat composer.json:12)
Tanggal audit: 6 Juni 2026
Ringkasan: Project sudah pada Laravel 13, namun sebagian besar struktur direktori & file masih mengikuti pola Laravel 10 ke bawah. Hanya bootstrap/app.php yang sudah menggunakan pola Laravel 11+ modern.


1. Ringkasan Eksekutif

Aspek Status Catatan Singkat
bootstrap/app.php ✅ Sesuai Sudah pakai Application::configure()
bootstrap/providers.php ❌ Tidak ada Service provider masih di config/app.php
app/Http/Kernel.php ✅ Sesuai Sudah dihapus (Laravel 11+ hapus)
app/Console/Kernel.php ✅ Sesuai Sudah dihapus
app/Exceptions/Handler.php ✅ Sesuai Sudah dihapus
config/app.php (providers) ❌ Tidak sesuai Wajib pindah ke bootstrap/providers.php
config/app.php (aliases) ❌ Tidak sesuai Facade::defaultAliases() deprecated di L11+
routes/web.php, api.php ✅ Ada Dipanggil via withRouting() di bootstrap/app.php
lang/ di root ⚠️ Duplikat Masih ada resources/lang/ (warisan L10)
Struktur app/, database/ ✅ Tidak masalah PSR-4 & tambahan folder custom tidak konflik
tests/ ⚠️ Partial TestCase masih extend Illuminate\Foundation\Testing\TestCase (seharusnya Tests\TestCase base, bukan wajib)
vite.config.js ✅ Sesuai Standar Laravel 11+
public/index.php ⚠️ Ketinggalan $app->bind('path.public', ...) tidak perlu di L13

Skor kepatuhan terhadap struktur standar Laravel 13: ± 60%.


2. Struktur Standar Laravel 13 (referensi)

project/
├── app/
│   ├── Console/                  # Commands only (no Kernel.php)
│   ├── Enums/                    # PHP 8.1+ native enums
│   ├── Events/
│   ├── Exceptions/               # Custom exceptions only (no Handler.php)
│   ├── Http/
│   │   ├── Controllers/
│   │   ├── Middleware/
│   │   ├── Requests/
│   │   └── Resources/
│   ├── Jobs/
│   ├── Listeners/
│   ├── Mail/
│   ├── Models/
│   ├── Notifications/
│   ├── Providers/
│   │   └── AppServiceProvider.php
│   ├── Rules/
│   ├── Services/
│   ├── Support/
│   └── Traits/
├── bootstrap/
│   ├── app.php                   # Konfigurasi aplikasi (routing, middleware, dll)
│   ├── providers.php             # Daftar service provider aplikasi (L11+)
│   └── cache/
├── config/                       # Hanya konfigurasi yang benar-benar dipakai
│   ├── app.php                   # TANPA providers & aliases
│   ├── auth.php
│   ├── database.php
│   └── ...
├── database/
│   ├── factories/
│   ├── migrations/
│   └── seeders/
│       └── DatabaseSeeder.php
├── lang/                         # Lokasi baru untuk file bahasa (L11+)
│   ├── en/
│   └── id/
├── public/
│   ├── build/                    # Hasil build Vite (L11+)
│   └── index.php
├── resources/
│   ├── css/
│   ├── js/
│   └── views/
├── routes/
│   ├── api.php
│   ├── channels.php
│   ├── console.php
│   └── web.php
├── storage/
├── tests/
│   ├── Feature/
│   ├── Unit/
│   └── TestCase.php
├── .env.example
├── artisan
├── composer.json
├── package.json
├── pest.php                      # atau phpunit.xml
└── vite.config.js

3. Temuan Detail per Area

3.1 bootstrap/SEBAGIAN SESUAI ⚠️

Bukti kondisi saat ini:

bootstrap/
├── app.php       ✅ (sudah modern)
└── cache/        ✅

bootstrap/providers.php TIDAK ADA.

Wajib dibuat. Laravel 13 secara otomatis memuat file ini. Jika tidak ada, semua service provider kustom dari paket yang tidak di-discover lewat composer tidak akan teregistrasi dengan benar (lihat §3.2).


3.2 config/app.phpTIDAK SESUAI

Bukti: config/app.php:234-292 masih memuat array providers yang sangat panjang, dan config/app.php:305-314 masih memuat aliases dengan Facade::defaultAliases()->merge([...]).

Konsekuensi di Laravel 13:

  • Facade::defaultAliases() sudah tidak digunakan lagi sejak L11. Method ini dapat mengembalikan hasil yang tidak lengkap atau tidak konsisten dengan resolver facade modern.
  • Array providers di config/app.php sebagian tetap dihormati oleh Laravel 13 untuk backward compatibility, tetapi bukan pola yang direkomendasikan. Service provider framework inti (Illuminate\Auth\AuthServiceProvider, Illuminate\Broadcasting\BroadcastServiceProvider, dll.) di L11+ di-auto-register dan tidak perlu dideklarasikan manual.

Rekomendasi:

  1. Pindahkan semua provider kustom/aplikasi ke bootstrap/providers.php (lihat §3.1).
  2. Hapus blok providers (L234–292) dari config/app.php.
  3. Hapus blok aliases (L305–314).
  4. Jika alias tertentu benar-benar masih dipakai (mis. JWTAuth, Captcha, Counter), daftarkan via ->withAliases([...]) di bootstrap/app.php, atau lebih baik ganti dengan use statement di file yang membutuhkan.

3.3 app/Http/Kernel.php, app/Console/Kernel.php, app/Exceptions/Handler.phpSESUAI

Bukti: Hasil pengecekan ls terhadap ketiga file menunjukkan NOT FOUND.

Sudah dihapus. Middleware, schedule, dan exception handling dialihkan ke bootstrap/app.php melalui withMiddleware(), Schedule::command(...) di routes/console.php, dan withExceptions().


3.4 app/Providers/PERLU REFACTOR ⚠️

Bukti: app/Providers/ berisi 4 file:

AppServiceProvider.php
BroadcastServiceProvider.php   ⚠️ hanya wrapper ChannelLoader
KDServiceProvider.php
SmtpServiceProvider.php

BroadcastServiceProvider.php (Laravel 11+ default masih ada untuk Broadcast::routes() & channel registration) — bisa dipertahankan untuk Broadcast::channel(...) atau dihapus dengan memindahkan channel ke routes/channels.php saja.

File AppServiceProvider.php, KDServiceProvider.php, SmtpServiceProvider.php — isinya tidak perlu dideklarasikan di config/app.php. Cukup masukkan ke bootstrap/providers.php.


3.5 config/BANYAK FILE WARISAN ⚠️

Bukti: config/ berisi 41 file. Laravel 13 default baru hanya ~12 file. Daftar lengkap:

app.php            ⚠️ sudah dibahas
auth.php           ✅
backup.php         📦 paket
broadcasting.php   ✅
cache.php          ✅
captcha.php        📦 paket
cors.php           ✅
database.php       ✅
datatables.php     📦 paket
debugbar.php       📦 paket (dev)
excel.php          📦 paket
feeds.php          📦 paket
filesystems.php    ✅
hashing.php        ✅
image.php          📦 paket
installer.php      📦 paket
json-api-paginate.php  📦 paket
jsvalidation.php   📦 paket
jwt.php            📦 paket
lfm.php            📦 paket
livewire.php       📦 paket
logging.php        ✅
mail.php           ✅
otp.php            📦 paket
permission.php     📦 paket
query-builder.php  📦 paket
querydetector.php  📦 paket
queue.php          ✅
recaptchav3.php    📦 paket
scribe.php         📦 paket
sentry.php         📦 paket
services.php       ✅
session.php        ✅
sluggable.php      📦 paket
theme-api.php      📦 paket
themes-manager.php 📦 paket
tinker.php         ✅
view.php           ✅

Catatan: File konfigurasi paket tidak salah jika ada, karena setiap paket menyediakan config/{name}.php dan boleh di-publish. Ini bukan masalah struktur Laravel 13.


3.6 lang/ dan resources/lang/DUPLIKAT

Bukti:

lang/                   ✅ lokasi baru (L11+)
└── en/

resources/lang/         ❌ lokasi lama (L10 ke bawah)
├── id/
└── vendor/

Rekomendasi: Migrasi resources/lang/id/* ke lang/id/* lalu hapus resources/lang/. resources/ di L11+ idealnya hanya berisi css/, js/, dan views/.


3.7 database/SESUAI

Struktur database/factories, database/migrations, database/seeders sesuai standar Laravel 13.


3.8 routes/SESUAI

Ada web.php, api.php, console.php, channels.php. Semuanya didaftarkan di bootstrap/app.php:36-42 lewat withRouting().


3.9 tests/PERLU REVIEW ⚠️

Bukti: tests/TestCase.php:36 masih extends BaseTestCase dari Illuminate\Foundation\Testing\TestCase. Pola ini sebenarnya masih valid di L13, tapi:

  • tests/CreatesApplication.php:47 masih memanggil $app->make(Kernel::class)->bootstrap() — di L13 method bootstrap() pada Application tidak lagi menerima Kernel (kernel pattern sudah hilang). Perlu dicek apakah baris ini masih berjalan — jika tidak, test mungkin crash.
  • pest.php:14 sudah benar menggunakan uses(Tests\TestCase::class).

Risiko: Trait CreatesApplication di L11+ biasanya hanya berisi:

public function createApplication()
{
    $app = require __DIR__.'/../bootstrap/app.php';
    $app->make(Kernel::class)->bootstrap();   // ← baris 47
    return $app;
}

Baris ->bootstrap() memanggil Console\Kernel::bootstrap() yang sudah tidak ada di L11+. Investigasi: kemungkinan test lolos karena Pest 4 + pest-plugin-laravel sudah meng-handle bootstrapping secara internal dan trait ini hanya dipanggil sebagian.


3.10 public/index.phpKETINGGALAN ⚠️

Bukti: public/index.php:50-52:

$app->bind('path.public', function () {
    return __DIR__;
});

Pola ini adalah workaround lama. Di L11+ bisa diganti dengan bootstrap/app.php:

->withRouting(... publicPath: __DIR__ . '/public' ...)

atau hapus saja karena L13 sudah otomatis menebak publicPath dari index.php yang sedang dieksekusi.


3.11 artisanSESUAI

Sudah benar. Tidak ada bootstrap/app.php-related changes.


3.12 composer.jsonSESUAI

  • laravel/framework: ^13.0
  • php: ^8.4
  • laravel/helpers: ^1.3 boleh di-keep untuk backward compat global helper.
  • pestphp/pest: ^4.3.2, phpunit/phpunit: ^12.5.8 sudah versi L13-compatible.

3.13 package.json & vite.config.jsSESUAI

Konfigurasi Vite standar. Hanya prettier dan playwright di devDependencies, tanpa laravel-vite-plugin di deps (plugin dipakai di runtime dari vendor Laravel).


4. Rencana Migrasi (Ringkasan Tindakan)

4.1 Wajib Dilakukan (Blokir L13 jika tidak)

# Aksi Lokasi Target Dampak
1 Buat bootstrap/providers.php bootstrap/providers.php (baru) Service provider tidak teregistrasi
2 Pindahkan array providers ke file tsb config/app.php L234-292 → hapus Bersamaan dengan #1
3 Hapus aliases atau migrasi ke ->withAliases() config/app.php L305-314 Facade global JWTAuth:: dll. akan error
4 Migrasi resources/lang/id/*lang/id/* resources/lang/ (hapus) Penerjemahan tidak akan termuat

4.2 Sangat Disarankan

# Aksi Lokasi
5 Cek tests/CreatesApplication.php:47 masih valid di L13 tests/CreatesApplication.php
6 Hapus $app->bind('path.public', ...) workaround public/index.php L50-52
7 Pindahkan channel broadcast ke routes/channels.php saja, hapus BroadcastServiceProvider app/Providers/BroadcastServiceProvider.php
8 Ganti penggunaan global facade (mis. JWTAuth::, Captcha::) dengan use statement atau ->withAliases() Seluruh codebase

4.3 Opsional (Best Practice)

# Aksi
9 Bersihkan config paket yang tidak relevan dengan paket L13 (beberapa paket masih L10-era; perlu audit kompatibilitas)
10 Tambahkan lang/en/ lengkap (sekarang hanya lang/en/ minimal)
11 Pindahkan schedule dari Console ke routes/console.php via Schedule::command(...) (L11+ style)

5. Lampiran: Diff Konseptual config/app.php

Sebelum (L10-style, saat ini):

return [
    'name' => env('APP_NAME', 'Dashboard Kecamatan'),
    'env'  => env('APP_ENV', 'production'),
    // ...
    'maintenance' => [...],

    'providers' => [
        Illuminate\Auth\AuthServiceProvider::class,
        // ... (50+ baris)
    ],

    'aliases' => Facade::defaultAliases()->merge([
        'Captcha'  => Mews\Captcha\Facades\Captcha::class,
        'Counter'  => App\Facades\Counter::class,
        // ...
    ])->toArray(),
];

Sesudah (L11+ style):

return [
    'name' => env('APP_NAME', 'Dashboard Kecamatan'),
    'env'  => env('APP_ENV', 'production'),
    // ...
    'maintenance' => [...],

    // 'providers' dihapus total
    // 'aliases' dihapus total
];

bootstrap/providers.php (baru):

<?php

return [
    App\Providers\AppServiceProvider::class,
    App\Providers\KDServiceProvider::class,
    App\Providers\SmtpServiceProvider::class,

    // Paket — hanya yang tidak auto-discover
    UniSharp\LaravelFilemanager\LaravelFilemanagerServiceProvider::class,
    Spatie\Permission\PermissionServiceProvider::class,
    Spatie\Html\HtmlServiceProvider::class,
    Maatwebsite\Excel\ExcelServiceProvider::class,
    Mews\Captcha\CaptchaServiceProvider::class,
    Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
    Rap2hpoutre\LaravelLogViewer\LaravelLogViewerServiceProvider::class,
];

bootstrap/app.php (tambahan withAliases opsional):

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(/* ... */)
    ->withMiddleware(/* ... */)
    ->withExceptions(/* ... */)
    ->withProviders()  // opsional, default-nya sudah baca bootstrap/providers.php
    ->withAliases([
        'JWTAuth'    => Tymon\JWTAuth\Facades\JWTAuth::class,
        'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class,
        'Captcha'    => Mews\Captcha\Facades\Captcha::class,
        'Counter'    => App\Facades\Counter::class,
        'Html'       => Spatie\Html\Facades\Html::class,
        'Excel'      => Maatwebsite\Excel\Facades\Excel::class,
        'Debugbar'   => Barryvdh\Debugbar\Facades\Debugbar::class,
    ])
    ->create();

6. Kesimpulan

Project OpenDK sudah setengah migrasi ke Laravel 13. Bagian modern (L11+) yang sudah tepat:

  • bootstrap/app.php
  • Penghapusan Kernel & Handler ✅
  • withRouting/withMiddleware/withExceptions

Yang masih L10 dan harus dirapikan:

  1. config/app.php memuat providers & aliases (warisan L10).
  2. bootstrap/providers.php belum dibuat.
  3. resources/lang/ masih ada (duplikat dengan lang/).
  4. public/index.php punya workaround path.public yang tidak diperlukan.
  5. tests/CreatesApplication.php masih memanggil Kernel::class yang sudah tidak ada di L11+ — perlu diverifikasi masih kompatibel.

Setelah poin 1-4 di atas dibersihkan, struktur OpenDK akan konsisten 100% dengan standar Laravel 13.

@pandigresik

Copy link
Copy Markdown
Contributor

Rekomendasi terkait event listener, CSRF dan model observer

rekomendasi.md


$response = $this->postJson('/api/frontend/v1/komplain', $data);
expect($response->getStatusCode())->toBeIn([201, 422]);
expect($response->getStatusCode())->toBeIn([201, 422, 500]);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kok ada http code 500, error itu kalau 500. Kalau awalan 2 atau 4 masih bisa diterima.

@pandigresik

pandigresik commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

install baru

simplescreenrecorder-2026-06-08_13.17.08.mp4

referensi: https://panduan.opendesa.id/opensdk/instalasi/hosting

@habibie11

Copy link
Copy Markdown
Contributor Author

silahkan diperiksa kembali mas @pandigresik

@pandigresik

Copy link
Copy Markdown
Contributor

Masalah Pada Fungsi theme_active()

Lokasi: helpers/general_helper.php:524-540

function theme_active()
{
    if (!sudahInstal() || !Schema::hasTable('das_themes')) {
        return null;
    }

    $themeActive = \App\Models\Themes::where('active', 1)->first();
    if (!$themeActive) {
        $themeActive = \App\Models\Themes::where('system', 1)->first();
        $themeActive->active = 1;
        $themeActive->save();  // ← UPDATE setiap request!
    }

    return \Hexadog\ThemesManager\Facades\ThemesManager::set($themeActive->slug);
}

Masalah yang Ditemukan

# Masalah Dampak
1 Schema::hasTable('das_themes') dipanggil setiap request Query SHOW TABLES berulang, tidak ada caching

@pandigresik

Copy link
Copy Markdown
Contributor

cek kembali file app/Services/DesaService.php akibat penggabungan PR #1570 karena masih menggunakan package willvincent\Feeds\Facades\FeedsFacade

@habibie11

Copy link
Copy Markdown
Contributor Author

cek kembali file app/Services/DesaService.php akibat penggabungan PR #1570 karena masih menggunakan package willvincent\Feeds\Facades\FeedsFacade

iya perlu disesuaikan, karna package itu sudah dihapus di branch laravel 13 ini, sekrang menggunakan package simplepie/simplepie.

@pandigresik

Copy link
Copy Markdown
Contributor

Cek hasil testing manual di #1573

@affandii06 affandii06 merged commit 8e6a182 into rilis-dev Jun 14, 2026
@affandii06 affandii06 deleted the upgrade-laravel-13 branch June 14, 2026 06:37
@affandii06 affandii06 added the Tingkat: T4 Lebih dari satu sprint, pertimbangkan untuk dipecah label Jun 14, 2026
@affandii06 affandii06 mentioned this pull request Jun 14, 2026
12 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Tingkat: T4 Lebih dari satu sprint, pertimbangkan untuk dipecah

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants